Garfield
YZF Admin
İkili NumPy biçimini kullanın: tek bir dizi için
Ön koşul olarak NumPy kurulu olmalıdır. Aşağıdaki örnekte
Bu örnekte beklenen sonuç
İşlemi kendi dizinizde uygulamak için:
Aşağıdaki tablo seçim yapmayı kolaylaştırır:
Tablodaki son seçenek, veri kaybı olmadan NumPy dizisi saklama amacı için ilk tercih değildir. CSV veya metin biçimi gerekiyorsa ondalık basamak sayısını açıkça belirlemek gerekir; aksi hâlde kayan noktalı değerlerin özgün ikili gösterimi tam olarak geri alınamayabilir. Ayrıca çok boyutlu dizilerin yapısı metin dosyasına kendiliğinden eksiksiz biçimde yazılmaz.
Burada hem
Salt sayısal dizilerde
numpy.save(), birden fazla dizi için numpy.savez() veya numpy.savez_compressed(). Bu yöntemler dizinin değerlerini, veri türünü (dtype) ve şeklini (shape) korur. Kaydettikten sonra dosyayı yeniden açıp dtype, shape ve değer eşitliğini kontrol ederseniz veri kaybı olmadığını doğrulayabilirsiniz.Tek NumPy dizisini kaydetme
numpy.save(), diziyi .npy dosyasına yazar. Dosya uzantısını belirtmezseniz NumPy genellikle .npy uzantısını ekler.Ön koşul olarak NumPy kurulu olmalıdır. Aşağıdaki örnekte
float32 türündeki iki boyutlu bir dizi kaydedilir ve tekrar okunur:
Python:
import numpy as np
veri = np.array(
[[1.5, 2.25], [3.75, 4.0]],
dtype=np.float32
)
np.save("veri.npy", veri)
okunan = np.load("veri.npy")
print(okunan)
print(okunan.dtype)
print(okunan.shape)
print(np.array_equal(veri, okunan))
Bu örnekte beklenen sonuç
float32, (2, 2) ve son satırda True değeridir. np.array_equal() değerlerin ve şeklin aynı olduğunu kontrol eder; dtype bilgisini ayrıca yazdırmak, veri türünün de korunup korunmadığını görmenizi sağlar.İşlemi kendi dizinizde uygulamak için:
- Dizinin veri türünü kontrol edin. Kaydetmeden önce
print(veri.dtype, veri.shape)çalıştırın. Böylece sonradan karşılaştıracağınız başlangıç bilgilerini elde edersiniz. - Diziyi
.npydosyasına kaydedin.np.save("dosya_adi.npy", veri)çağrısı, dizinin sayısal değerlerini ve yapısal bilgilerini ikili biçimde yazar. - Dosyayı yeniden yükleyin.
okunan = np.load("dosya_adi.npy")ile kaydedilen diziyi belleğe alın. - Sonucu karşılaştırın.
np.array_equal(veri, okunan)sonucuTrueise değerler ve şekil aynıdır;okunan.dtypedeğerini de başlangıçtakiveri.dtypeile karşılaştırın.
Birden fazla diziyi tek dosyada saklama
Aynı dosyada birden fazla dizi tutmanız gerekiyorsanp.savez() kullanabilirsiniz. Her diziye ad verirseniz daha sonra hangi veriyi okuyacağınız açık olur.
Python:
import numpy as np
x = np.arange(6, dtype=np.int16)
y = np.array([[True, False], [False, True]], dtype=np.bool_)
np.savez("veriler.npz", sayilar=x, maske=y)
arsiv = np.load("veriler.npz")
print(arsiv["sayilar"])
print(arsiv["sayilar"].dtype)
print(arsiv["maske"])
print(np.array_equal(x, arsiv["sayilar"]))
print(np.array_equal(y, arsiv["maske"]))
.npz dosyası, birden fazla .npy dizisini bir arada tutan arşivdir. Dosya boyutunu küçültmek isterseniz np.savez_compressed("veriler.npz", sayilar=x, maske=y) kullanabilirsiniz. Sıkıştırma, kayıplı görüntü veya ses biçimlerindeki gibi yaklaşık değer üretmez; amaç dosya boyutunu azaltırken dizi değerlerini korumaktır.Aşağıdaki tablo seçim yapmayı kolaylaştırır:
| Yöntem | Dosya | Ne zaman kullanılmalı? | Dikkat edilmesi gereken |
|---|---|---|---|
np.save() | .npy | Tek NumPy dizisi | Bir dosyada genellikle tek dizi bulunur |
np.savez() | .npz | Birden fazla diziyi adlarıyla saklama | Arşiv içindeki diziler adlarıyla okunur |
np.savez_compressed() | .npz | Daha küçük dosya boyutu gerektiğinde | Sıkıştırma ve açma işlemi ek süre gerektirebilir |
np.savetxt() | Metin dosyası | İnsan tarafından okunması veya başka bir metin aracıyla paylaşılması gerektiğinde | Veri türü, şekil veya hassas kayan nokta değerleri için ikili biçim kadar güvenli değildir |
Kayan noktalı değerleri doğrulama
Kayan noktalı hesaplamalardanp.array_equal() katı bir eşitlik denetimidir. Dosya biçimi değerleri korusa da diziyi kaydetmeden önce başka hesaplamalar yaptıysanız veya farklı bir işlemci ortamında sonuç ürettiyseniz küçük sayısal farkları ayrıca incelemek isteyebilirsiniz. Bu durumda np.allclose() yaklaşık eşitliği ölçer; ancak bu, kaydetme işleminin kayıplı olduğu anlamına gelmez.
Python:
import numpy as np
veri = np.array([0.1, 0.2, 0.3], dtype=np.float64)
np.save("ondalik.npy", veri)
okunan = np.load("ondalik.npy")
print(veri.dtype == okunan.dtype)
print(veri.shape == okunan.shape)
print(np.array_equal(veri, okunan))
print(np.allclose(veri, okunan))
Burada hem
array_equal hem de allclose sonucunun True olması, bu kaydetme ve yeniden yükleme örneğinde değerlerin aynı olduğunu gösterir. allclose sonucunun True olması tek başına bit düzeyinde özdeşliği kanıtlamaz. array_equal de +0.0 ile -0.0 değerlerini eşit kabul eder; NaN içeren sayısal dizileri karşılaştırırken equal_nan=True gerekir. object içermeyen dizilerde bit düzeyinde kontrol için aynı dtype ve shape yanında veri.tobytes(order="C") == okunan.tobytes(order="C") karşılaştırmasını kullanın.Nesne türü içeren dizilerde dikkat
dtype=object kullanan diziler; Python dizeleri, listeleri veya özel nesneleri içerebilir. Bu tür dizilerde np.save() ve np.load() için serileştirme güvenlik riski doğabilir. Güvenmediğiniz bir kaynaktan gelen .npy veya .npz dosyasını allow_pickle=True ile açmayın; dosya güvenilir değilse yalnızca yüklemek yerine veri kaynağını ve içeriğini önce doğrulayın.Salt sayısal dizilerde
int32, float64, bool gibi açık bir dtype kullanmak daha öngörülebilir bir seçimdir. Böylece yeniden yüklenen verinin hem değerlerini hem de hangi türle yorumlanacağını kontrol edebilirsiniz.
Son düzenleme: