vectores una tutorial recorrer multiplicar matriz matrices imprimir guardar espaƱol datos python numpy binary-data

python - tutorial - convertir una cadena binaria a una matriz numpy



recorrer una matriz en python (1)

>>> np.fromstring(b''/x00/x00/x80?/x00/x00/x00@/x00/x00@@/x00/x00/x80@'', dtype=''<f4'') # or dtype=np.dtype(''<f4''), or np.float32 on a little-endian system (which most computers are these days) array([ 1., 2., 3., 4.], dtype=float32)

O, si quieres big endian:

>>> np.fromstring(b''/x00/x00/x80?/x00/x00/x00@/x00/x00@@/x00/x00/x80@'', dtype=''>f4'') # or dtype=np.dtype(''>f4''), or np.float32 on a big-endian system array([ 4.60060299e-41, 8.96831017e-44, 2.30485571e-41, 4.60074312e-41], dtype=float32)

La b no es necesaria antes de Python 3, por supuesto.

De hecho, si realmente está utilizando un archivo binario para cargar los datos, incluso podría omitir el paso de usar una cadena y cargar los datos directamente desde el archivo con numpy.fromfile() .

Además, dtype reference, por si acaso: http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

Supongamos que tengo la cadena:

my_data = ''/x00/x00/x80?/x00/x00/x00@/x00/x00@@/x00/x00/x80@''

El lugar donde lo obtuve es irrelevante, pero por el simple hecho de tener algo concreto, asuma que lo leí de un archivo binario.

Sé que mi cadena es la representación binaria de 4 (4 bytes) flotantes. Me gustaría obtener esos flotadores como una matriz numpy. Yo podria hacer

import struct import numpy as np tple = struct.unpack( ''4f'', my_data ) my_array = np.array( tple, dtype=np.float32 )

Pero parece tonto crear una tupla intermedia. ¿Hay una manera de hacer esta operación sin crear una tupla intermedia?

EDITAR

También me gustaría poder construir la matriz de tal manera que pueda especificar la endianidad de la cadena.