我使用这种语法来转换字节数组数据字(每个样本2个字节):
data = numpy.fromstring(dataword, dtype=numpy.int16)
Python 3.7中的相同指令返回错误:
TypeError: fromstring() argument 1 must be read-only bytes-like object, not memoryview
dataword = scope.ReadBinary(rlen-4) #dataword is a byte array, each 2 byte is an integer
data = numpy.fromstring(dataword, dtype=numpy.int16)# data is the int16 array
这是Python 2.7.14中data
的内容:
[-1.41601562 -1.42382812 -1.42578125 ..., 1.66992188 1.65234375 1.671875 ]
我希望用Python 3.7获得相同的结果。
我怎么在3.7中使用numpy.fromstring()
?
TypeError
试图告诉你dataword
是不支持的类型memoryview
。
它需要作为不可变类型传递,如bytes
:
data = numpy.fromstring(dataword.tobytes(), dtype=numpy.int16)
更好;看起来像scope
是一个类似文件的对象,所以这也可以工作:
data = numpy.fromfile(scope, dtype=numpy.int16, count=rlen//2-4)
简单的解决方案...发现阅读numpy手册:用frombuffer替换fromstring
data = numpy.frombuffer(dataword,dtype = numpy.int16)完美无缺