Я пытаюсь перенести часть кода, написанного на другом языке (малоизвестный под названием Igor Pro от Wavemetrics для тех, кто о вас слышал), на Python.
В этом коде происходит преобразование типа данных из 16-разрядного целого числа (считанного из 16-разрядного двоичного файла с прямым порядком байтов) в 32-разрядное число с плавающей точкой одинарной точности. В этой программе преобразование выглядит следующим образом:
16-разрядное целое число со знаком:
print tmp
tmp[0]={-24160,18597,-24160,18597,-24160}
преобразовано в 32-битную с плавающей точкой:
Redimension/S/E=1 tmp
print tmp
tmp[0]={339213,339213,5.79801e-41,0,0}
Флаг / опция /S
указывает, что тип данных tmp
должен быть float32 вместо int16. Однако я считаю, что важным флагом / параметром является /E=1
, который называется «Принудительное изменение формы без преобразования или перемещения данных».
В Python преобразование выглядит следующим образом:
>>> tmp[:5]
array([-24160, 18597, -24160, 18597, -24160], dtype=int16)
>>> tmp.astype('float32')
array([-24160., 18597., -24160., ..., 18597., -24160., 18597.], dtype=float32)
Это то, что я ожидаю, но мне нужно найти функцию / операцию, которая эмулирует опцию /E=1
в исходном коде выше. Есть ли очевидный способ конвертации -24160 и 18597 в 339213? Это как-то связано с byteswap
или newbyteorder
или чем-то еще?