2012-08-03 18 views
6

Birkaç yinelemeden geçen bir kod var. Her yinelemede kod, sayısal temelli bir dizi oluşturur. Numpy tabanlı diziyi varolan bir ikili .dat dosyasına eklerim. Ben bir diziye bütün ikili dosyasını okumaya çalışıyorumBir ikili .dat dosyasını bir dizi olarak okuma

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

: Ben verileri oluşturmak için aşağıdaki kodu kullanabilirsiniz.

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

Hata durumunu:

  1. Aşağıdaki kod çalıştı: Aşağıdaki güçlük çekiyorum

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

  2. okuduğum ardından bir dizi esaslı dizi kullanmak ve çalıştı diziye dosya.

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

Ancak NewData bu WholeData aynı değildir, yani, hatalı. Verilerin numpy.array olarak kaydedilmesi ve array.array olarak okunması iyi bir seçenek olmayabilir.

Herhangi bir öneri takdir edilecektir.

cevap

16

Ben numpy.fromfile burada istediğini olduğunu düşünüyorum:

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

Ayrıca bu dokümanlar göre dikkat bu "kayıp kesinlik hakkında bilgi ve endian" gibi verileri depolamak için en iyi yol değildir . Diğer bir deyişle, veri türüne iletilen veri türünün, ilk başta dosyaya yazdıklarınızla uyumlu olduğundan emin olmanız gerekir.

+0

! Verileri depolamak için daha iyi yöntemlere bakacağım. Çok teşekkürler, mgilson. – Nazmul

+0

Bu, verileri float olarak okumak için iyi çalışır. Ama veri tablosunu okumak istersem ne yapmalıyım? Orijinal veri şeması boyutunu korumak istiyorum. – hmi

0

listeye dosyadan ikili okumak için: Bu iyi çalışır

list_int = [ord(i) for i in fd.read()] 
İlgili konular