2012-08-03 26 views
6

Tengo un código que pasa por varias iteraciones. En cada iteración, el código genera una matriz basada en numpy. Añado la matriz basada numpy a un archivo .dat binario existente. Yo uso el siguiente código para generar los datos:Lectura de un archivo .dat binario como una matriz

WholeData = numpy.concatenate((Location,Data),axis=0) 
# Location & Data are two numpy arrays 
DataBinary = open('DataBinary.dat','ab') 
WholeData.tofile(DataBinary) 
DataBinary.close() 

Estoy tratando de leer todo el archivo binario en una matriz. Estoy teniendo las siguientes dificultades:

  1. He probado el siguiente código: estado

    NewData = numpy.array('f') 
    File1 = open('DataBinary.dat','rb') 
    NewData.fromstring(File1.read()) 
    File1.close() 
    

    error:

    Traceback (most recent call last): File "", line 1, in AttributeError: 'numpy.ndarray' object has no attribute 'fromstring'

  2. Me trataron de utilizar una matriz basada en matrices y después lee el archivo en la matriz.

    from array import array 
    File1 = open('DataBinary.dat','rb') 
    NewData.fromstring(File1.read()) 
    File1.close() 
    

Sin embargo, NewData es errónea, es decir, no es el mismo que WholeData. Supongo que guardar los datos como numpy.array y leerlo como array.array podría no ser una buena opción.

Cualquier sugerencia será apreciada.

Respuesta

16

creo que numpy.fromfile es lo que queremos aquí:

import numpy as np 
myarray = np.fromfile('BinaryData.dat',dtype=float) 

También tenga en cuenta que de acuerdo a la documentación, esta no es la mejor manera de almacenar los datos como "información sobre la precisión y la orden de bits se pierde" . En otras palabras, debe asegurarse de que el tipo de datos pasado a dtype sea compatible con lo que originalmente escribió en el archivo.

+0

Esto funciona bien! Buscaré los mejores métodos para almacenar datos. Muchas gracias, mgilson. – Nazmul

+0

Esto funciona bien para leer los datos como flotante. Pero, ¿qué debo hacer si quiero leer una tabla de datos? Me gustaría mantener la dimensión del marco de datos original. – hmi

0

Para leer desde el archivo binario a la lista:

list_int = [ord(i) for i in fd.read()] 
Cuestiones relacionadas