Функция NumPy `fromstring` отлично работает в Python 2.7, но возвращает ошибку в Python 3.7 - PullRequest
1 голос
/ 27 марта 2019

Я использую этот синтаксис для преобразования слова данных массива байтов (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

Этосодержимое data в Python 2.7.14:

[-1.41601562 -1.42382812 -1.42578125 ...,  1.66992188  1.65234375  1.671875  ]

Я ожидаю получить тот же результат с Python 3.7.

Как я должен использовать numpy.fromstring() в 3.7

Ответы [ 2 ]

1 голос
/ 27 марта 2019

TypeError пытается сообщить вам, что dataword относится к неподдерживаемому типу memoryview.
Его необходимо передать как неизменяемый тип, например bytes:

data = numpy.fromstring(dataword.tobytes(), dtype=numpy.int16)

Еще лучше;похоже, что scope является файловым объектом, поэтому это также может работать:

data = numpy.fromfile(scope, dtype=numpy.int16, count=rlen//2-4)
0 голосов
/ 29 марта 2019

простое решение ... найдено чтение numpy руководства: заменить fromstring на frombuffer

data = numpy.frombuffer (dataword, dtype = numpy.int16) работает отлично

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...