numpy.recarray.tobytes
的反义词是什么?
>>> import numpy as np
>>> A = np.array([(28483,27759)],dtype=[('x','<u2'),('y','<u2')])
>>> A.tobytes()
'Cool'
这里的
A
是一个4字节的结构化数组,而tobytes
让我以二进制形式对其进行序列化。如何获得适当大小的二进制字符串并在给定dtype
对象的情况下反序列化? 最佳答案
我怀疑您要使用frombuffer
,它将一个字节串(或更普遍地说,是任何支持buffer protocol的Python对象)解释为数组。默认情况下,它假定dtype
为np.float64
,但是您可以指定特定的dtype
,包括结构化的dtype
。
>>> import numpy as np
>>> A = np.frombuffer(b"Cool", dtype=[('x','<u2'),('y','<u2')])
>>> A
array([(28483, 27759)],
dtype=[('x', '<u2'), ('y', '<u2')])
frombuffer
的一个怪癖是它创建了一个数组,该数组直接引用您赋予它的字节,而不是复制它们。这意味着,如果您在Python字节串上使用了它(例如),则结果数组将为只读:>>> A["x"] = 23
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: assignment destination is read-only
如果您想要可写的东西,请使用
np.fromstring
而不是np.frombuffer
:>>> A = np.fromstring(b"Cool", dtype=[('x','<u2'),('y','<u2')])
>>> A["x"] = 23
>>> A
array([(23, 27759)],
dtype=[('x', '<u2'), ('y', '<u2')])
有关更多信息,请参见this answer。
如果要使用真正的NumPy record array(而不是structured array,后者只是具有结构化dtype的常规
ndarray
),则可以将结果传递给nd.rec.array
:>>> np.rec.array(A)
rec.array([(28483, 27759)],
dtype=[('x', '<u2'), ('y', '<u2')])
记录数组与结构化数组非常相似,但具有自己的
ndarray
子类,并允许通过属性访问来检索字段:>>> B = np.rec.array(A)
>>> B.x
array([28483], dtype=uint16)
关于python - numpy.recarray.tobytes的倒数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47720307/