2013-09-10 22 views
8

Python'da yeniyim. a büyük bir dizi var, (43200, 4000) gibi boyutları ile ve bunu, gelecekteki işleme için gereken gibi kaydetmek gerekiyor. Ben bir np.savetxt ile kaydetmeye çalıştığınızda, txt dosyası çok büyük ve aynı boyutta 5 dosya işlemek gerekiyor çünkü programım bellek hatasında çalışır. Daha az bellek alabilmesi için büyük dizileri kurtarmak için herhangi bir yolu var mı?Büyük diziyi python'da daha az bellek alacak şekilde nasıl kaydederim?

Teşekkürler. Verilerinizi metin dosyasına kaydetmek son derece verimsizdir.

+3

np.savetxt ('file.npy.gz') 'ı denediniz mi? Kaydetmek ve sonradan yüklemek (sıkıştırma nedeniyle) daha uzun zaman alacaktır, ancak dosyanın boyutunu büyük ölçüde azaltmalıdır. – wflynny

+0

@Bill cevabınız için teşekkürler, sadece np.savetxt ('file.npy.gz') ile denedim, ve dosya boyutumı küçült ama veriyi geri yükleyemedi. – user2766019

+0

Dosyayı kaydettiğiniz dosya uzantısına sahip olduğunuzdan emin misiniz? 'Np.loadtxt ('file.npy.gz') '. – wflynny

cevap

3

Verileri depolamak için Hiyerarşik Veri Biçimi (HDF) dosyası oluşturmak için PyTables öğesini kullanabilirsiniz. Bu da kaydedildiğini dosyaya çalışıyoruz nesneyi bağlamak bazı ilginç bellek seçenekleri sağlar Burada

Bunun nasıl gösterir başka bir StackOverflow soruları ise:. Eğer isteyen varsa "How to store a NumPy multidimensional array in PyTables."

Bu boyuttaki dosyalar ile
import pandas 
import numpy as np 
a = np.ones((43200, 4000)) # Not recommended. 
x = pandas.HDFStore("some_file.hdf") 

x.append("a", pandas.DataFrame(a)) # <-- This will take a while. 
x.close() 

# Then later on... 
my_data = pandas.HDFStore("some_file.hdf") # might also take a while 
usable_a_copy = my_data["a"] # Be careful of the way changes to 
          # `usable_a_copy` affect the saved data. 

copy_as_nparray = usable_a_copy.values 

, başvurunuzun bir paralel algoritma ile yapılabilir olup olmadığını düşünebilirsiniz: bir Pandalar DataFrame nesnesi olarak dizi çalışma, ayrıca PyTables/HDF5, örneğin için Pandalar arabirimini kullanabilirsiniz ve potansiyel olarak sadece büyük dizilerin alt kümelerine uygulanır Devam etmeden önce tüm diziyi tüketmeye gerek kalmadan.

10

Numpy, büyük dizileri saklamak için daha uygun olan save ve savez/savez_compressed dahili kaydetme komutlarına sahiptir.

Verilerinizi nasıl kullanacağınıza bağlı olarak, büyük veri kümelerini bellekte yüklemeye gerek kalmadan depolamanıza olanak tanıyan HDF5 biçimine (h5py veya pytables) da bakmalısınız.

İlgili konular