Kısa bir cevap için np.save
ve kullanmalısınız np.load
. Bunların avantajları, numpy kitaplığının geliştiricileri tarafından yapılmış olmaları ve halihazırda çalışıyor olmalarıdır (artı muhtemelen zaten güzel bir şekilde optimize edilmiştir) örn.
import numpy as np
from pathlib import Path
path = Path('~/data/tmp/').expanduser()
path.mkdir(parents=True, exist_ok=True)
lb,ub = -1,1
num_samples = 5
x = np.random.uniform(low=lb,high=ub,size=(1,num_samples))
y = x**2 + x + 2
np.save(path/'x', x)
np.save(path/'y', y)
x_loaded = np.load(path/'x.npy')
y_load = np.load(path/'y.npy')
print(x is x_loaded)
print(x == x_loaded)
Genişletilmiş cevap:
Sonunda, gerçekten ihtiyaçlarınıza bağlıdır çünkü onu insan tarafından okunabilir formatta kaydedebilirsiniz (bu NumPy dizisini bir csv dosyasına dökmeye bakın ) veya dosyalarınız çok büyükse diğer kitaplıklarla bile ( uyuşmuş dizileri korumanın en iyi yolunu görün) genişletilmiş bir tartışma için diskte ).
Bununla birlikte, (sorunuzda "doğru" kelimesini kullandığınız için bir genişletme yapmak) Hala kutudan çıkan numpy işlevini (ve çoğu kodu!) Kullanmanın çoğu kullanıcı ihtiyacını karşılayacağını düşünüyorum. En önemli nedeni zaten çalışıyor olmasıdır . Başka bir nedenle başka bir şeyi kullanmaya çalışmak, neden çalışmadığını anlamak ve işe yaramaya zorlamak için sizi beklenmedik bir UZUN tavşan deliğine götürebilir.
Örneğin turşu ile kurtarmaya çalışın. Bunu sadece eğlence için denedim ve dosyayı bayt modunda açıp okumadıkça turşunun eşyalarımı kurtarmayacağını anlamam en az 30 dakikamı aldı wb
. Google'a zaman ayırdı, bir şeyi dene, hata mesajını anla vs ... Küçük detay ama zaten bir dosyayı açmamı gerektirmesi, işleri beklenmedik şekillerde karmaşık hale getirdi. Bunu yeniden okumamı gerektirdiğini eklemek için (hangi btw biraz kafa karıştırıcıdır) Yerleşik açık işlevde a, a +, w, w + ve r + modları arasındaki fark? .
Öyleyse, ihtiyaçlarınızı karşılayan bir arabirim varsa, ( çok ) iyi bir nedeniniz yoksa (örneğin, matlab ile uyumluluk veya herhangi bir nedenle dosyayı gerçekten okumak ve python'da yazdırmak gerçekten ihtiyaçlarınızı karşılamıyorsa) kullanın. şüpheli olabilir). Ayrıca, büyük olasılıkla optimize etmeniz gerekirse, daha sonra öğreneceksiniz (basit bir numpy dosyası açmak gibi gereksiz şeylerde hata ayıklamak için zaman harcamak yerine).
Bu yüzden / numpy sağlama arayüzünü kullanın . Mükemmel olmayabilir, büyük olasılıkla iyidir, özellikle de uzun süredir ortalıkta olmayan bir kütüphane için.
Verileri kaydetme ve yükleme işini numpy ile bir sürü şekilde harcadım, bu yüzden eğlenin, umarım yardımcı olur!
import numpy as np
import pickle
from pathlib import Path
path = Path('~/data/tmp/').expanduser()
path.mkdir(parents=True, exist_ok=True)
lb,ub = -1,1
num_samples = 5
x = np.random.uniform(low=lb,high=ub,size=(1,num_samples))
y = x**2 + x + 2
np.save(path/'x', x)
np.save(path/'y', y)
np.savez(path/'db', x=x, y=y)
with open(path/'db.pkl', 'wb') as db_file:
pickle.dump(obj={'x':x, 'y':y}, file=db_file)
x_loaded = np.load(path/'x.npy')
y_load = np.load(path/'y.npy')
db = np.load(path/'db.npz')
with open(path/'db.pkl', 'rb') as db_file:
db_pkl = pickle.load(db_file)
print(x is x_loaded)
print(x == x_loaded)
print(x == db['x'])
print(x == db_pkl['x'])
print('done')
Öğrendiklerime dair bazı yorumlar:
np.save
beklendiği gibi, bu zaten onu iyi sıkıştırır (bkz. https://stackoverflow.com/a/55750128/1601580 ), herhangi bir dosya açılmadan kutudan çıkar. Temiz. Kolay. Verimli. Kullan onu.
np.savez
sıkıştırılmamış bir biçim kullanır (bkz. belgeler ) Save several arrays into a single file in uncompressed
.npz format.
Bunu kullanmaya karar verirseniz (standart çözümden uzaklaşmanız için uyarıldınız, bu nedenle hatalar bekleyin !), istemediğiniz sürece, bağımsız değişken adlarını kullanmanız gerektiğini keşfedebilirsiniz. varsayılan isimleri kullanın. Bu nedenle, ilk zaten çalışıyorsa bunu kullanmayın (veya herhangi bir çalışma bunu kullanır!)
- Turşu ayrıca isteğe bağlı kod yürütülmesine izin verir. Bazı insanlar güvenlik nedeniyle bunu kullanmak istemeyebilir.
- insanlar tarafından okunabilir dosyaların oluşturulması pahalıdır, vb. Muhtemelen buna değmez.
hdf5
büyük dosyalar için çağrılan bir şey var . Güzel! https://stackoverflow.com/a/9619713/1601580
Bunun kapsamlı bir cevap olmadığını unutmayın. Ancak diğer kaynaklar için şunu kontrol edin: