• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

NumPy dizileri veri kaybı olmadan nasıl kaydedilir?

  • Konuyu Başlatan Konuyu Başlatan Garfield
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 0
  • Etiketler Etiketler
    veri bilimi

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
İkili NumPy biçimini kullanın: tek bir dizi için 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:
  1. 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.
  2. Diziyi .npy dosyasına kaydedin. np.save("dosya_adi.npy", veri) çağrısı, dizinin sayısal değerlerini ve yapısal bilgilerini ikili biçimde yazar.
  3. Dosyayı yeniden yükleyin. okunan = np.load("dosya_adi.npy") ile kaydedilen diziyi belleğe alın.
  4. Sonucu karşılaştırın. np.array_equal(veri, okunan) sonucu True ise değerler ve şekil aynıdır; okunan.dtype değerini de başlangıçtaki veri.dtype ile karşılaştırın.

Birden fazla diziyi tek dosyada saklama​

Aynı dosyada birden fazla dizi tutmanız gerekiyorsa np.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öntemDosyaNe zaman kullanılmalı?Dikkat edilmesi gereken
np.save().npyTek NumPy dizisiBir dosyada genellikle tek dizi bulunur
np.savez().npzBirden fazla diziyi adlarıyla saklamaArşiv içindeki diziler adlarıyla okunur
np.savez_compressed().npzDaha küçük dosya boyutu gerektiğindeSı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ğindeVeri türü, şekil veya hassas kayan nokta değerleri için ikili biçim kadar güvenli değildir
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.

Kayan noktalı değerleri doğrulama​

Kayan noktalı hesaplamalarda np.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:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Geri
Üst