Расшифровка массива чисел из базы данных в python - PullRequest
0 голосов
/ 17 октября 2018

Я читаю переменную x из столбца в базе данных, используя SQLAlchemy.Я знаю, что эта строка представляет 60 (float или float16) чисел.Мне не повезло в использовании np.fromstring.Интересно, как привести это к списку чисел в SQLAlchemy.

Следующая страница предназначена для вставки байта в определенный столбец в pymssql. Вставьте байт в столбец sql сервера varbinary (max), используя pymssql

import numpy as np
import binascii
x=b'\x91\xfe\xc3\xfe\xeb\xfe\xef\xfe\x04\xff\x1d\xff+\xff+\xff1\xff:\xffD\xffO\xffS\xffc\xffl\xff|\xff\x8f\xff\xa8\xff\xb3\xff\xbd\xff\xc7\xff\xcc\xff\xd0\xff\xd6\xff\xe5\xff\xfe\xff\xfe\xff\xfe\xff\xfe\xff\xfe\xff\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 
y = np.fromstring(x,dtype=np.float16,count=60)
print(y)


[             nan              nan              nan              nan
              nan              nan              nan              nan
              nan              nan              nan              nan
              nan              nan              nan              nan
              nan              nan              nan              nan
              nan              nan              nan              nan
              nan              nan              nan              nan
              nan              nan   3.57627869e-07   3.57627869e-07
   3.57627869e-07   3.57627869e-07   3.57627869e-07   3.57627869e-07
   3.57627869e-07   3.57627869e-07   3.57627869e-07   3.57627869e-07
   3.57627869e-07   3.57627869e-07   3.57627869e-07   3.57627869e-07
   3.57627869e-07   3.57627869e-07   3.57627869e-07   3.57627869e-07
   3.57627869e-07   3.57627869e-07   3.57627869e-07   3.57627869e-07
   3.57627869e-07   3.57627869e-07   3.57627869e-07   3.57627869e-07
   3.57627869e-07   3.57627869e-07   3.57627869e-07   3.57627869e-07]

Я ожидаю число от -40 до 40 для каждого элемента массива.

1 Ответ

0 голосов
/ 08 ноября 2018

Итак, получается, что числа сохраняются в формате int16.Кроме того, np.fromstring устарела и заменена на np.frombuffer.Единица измерения была в мм вместо см, поэтому результирующие числа находятся в диапазоне от -400 до 400.

import numpy as np
import binascii
x=b'\x91\xfe\xc3\xfe\xeb\xfe\xef\xfe\x04\xff\x1d\xff+\xff+\xff1\xff:\xffD\xffO\xffS\xffc\xffl\xff|\xff\x8f\xff\xa8\xff\xb3\xff\xbd\xff\xc7\xff\xcc\xff\xd0\xff\xd6\xff\xe5\xff\xfe\xff\xfe\xff\xfe\xff\xfe\xff\xfe\xff\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' 
y = np.fromstring(x,dtype=np.float16,count=60)
print(y) 

[-367 -317 -277 -273 -252 -227 -213 -213 -207 -198 -188 -177 -173 -157
 -148 -132 -113  -88  -77  -67  -57  -52  -48  -42  -27   -2   -2   -2
   -2   -2    6    6    6    6    6    6    6    6    6    6    6    6
    6    6    6    6    6    6    6    6    6    6    6    6    6    6
    6    6    6    6]
...