2012-08-03 84 views
6

Ho un codice che attraversa diverse iterazioni. In ogni iterazione, il codice genera una matrice basata su Numpy. Aggiungo l'array basato su numpy a un file .dat binario esistente. Io uso il seguente codice per generare i dati:Lettura di un file .dat binario come matrice

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

Sto cercando di leggere l'intero file binario in un array. Sto avendo le seguenti difficoltà:

  1. ho provato il seguente codice: Stato

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

    Errore:

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

  2. Ho cercato di usare una matrice a base array e poi leggere il file nell'array.

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

Tuttavia, NewData è erroneo, cioè, non è stesso WholeData. Immagino che salvare i dati come numpy.array e leggerlo come array.array potrebbe non essere una buona opzione.

Qualsiasi suggerimento sarà apprezzato.

risposta

16

penso che numpy.fromfile è ciò che si vuole qui:

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

Si noti inoltre che, secondo la documentazione, questo non è il modo migliore per conservare i dati come "informazioni sulla precisione e endianness è perduto" . In altre parole, è necessario assicurarsi che il datatype passato a dtype sia compatibile con ciò che si è originariamente scritto sul file.

+0

Questo funziona bene! Analizzerò i metodi migliori per memorizzare i dati. Grazie mille, mgilson. – Nazmul

+0

Funziona bene per leggere i dati come float. Ma cosa dovrei fare, se voglio leggere un data table? Vorrei mantenere la dimensione originale del dataframe. – hmi

0

Per leggere binari dal file alla lista:

list_int = [ord(i) for i in fd.read()] 
Problemi correlati