Garfield
YZF Admin
İki fonksiyon da NumPy dizisi üretir; temel fark, dizinin nasıl belirlendiğidir.
Çıktı şöyledir:
Burada dizi 0'dan başlar, 2'şer artar ve 10'a ulaşmadan durur. Bitiş değeri genellikle dahil edilmez. Adım değeri açıkça yazılmazsa varsayılan adım 1'dir:
Çıktı:
Bu örnekte adım doğrudan 2 olarak verilmemiştir. NumPy, 0 ile 10 arasında 6 değer üreterek 5 eşit aralık oluşturduğu için ardışık değerler arasındaki fark 2 olmuştur.
Seçim yaparken kendinize şu soruyu sorun: Belirli bir adımı mı biliyorum, yoksa toplam kaç örnek istediğimi mi?
Örneğin 0 ile 1 arasında 0,1 adımlarla ilerlemek istiyorsanız
Ancak 0 ve 1 dahil olmak üzere tam 11 değer istiyorsanız
İki ifade matematiksel olarak benzer görünen sonuçlar verebilir; fakat amaçları aynı değildir.
Bilgisayarlar birçok ondalık sayıyı ikili kayan nokta biçiminde tam olarak temsil edemez. Bu nedenle
Beklenen çıktı şöyledir:
Burada
Belirli bir sayı aralığında 2'şer, 5'er veya 0,1'er ilerlemek istiyorsanız
arange() başlangıç, bitiş ve adım değerine göre ilerler; linspace() ise başlangıç ile bitiş arasına kaç değer yerleştirileceğini belirler. Bu nedenle belirli bir adımla ilerleyen sayılar için arange, iki uç nokta arasında sabit sayıda örnek üretmek için linspace kullanılır.arange ve linspace nasıl çalışır?
np.arange(start, stop, step) ifadesinde start başlangıç değeridir, stop varsayılan olarak diziye dahil edilmez ve step artış miktarını belirler. Örneğin:
Python:
import numpy as np
sayilar = np.arange(0, 10, 2)
print(sayilar)
Çıktı şöyledir:
Kod:
[0 2 4 6 8]
Burada dizi 0'dan başlar, 2'şer artar ve 10'a ulaşmadan durur. Bitiş değeri genellikle dahil edilmez. Adım değeri açıkça yazılmazsa varsayılan adım 1'dir:
Python:
np.arange(3)
# array([0, 1, 2])
np.linspace(start, stop, num) ifadesinde ise num, üretilecek toplam değer sayısıdır. Başlangıç ve bitiş değerleri varsayılan davranışta diziye dahildir:
Python:
import numpy as np
sayilar = np.linspace(0, 10, 6)
print(sayilar)
Çıktı:
Kod:
[ 0. 2. 4. 6. 8. 10.]
Bu örnekte adım doğrudan 2 olarak verilmemiştir. NumPy, 0 ile 10 arasında 6 değer üreterek 5 eşit aralık oluşturduğu için ardışık değerler arasındaki fark 2 olmuştur.
Hangi durumda hangisi seçilmeli?
Seçim yaparken kendinize şu soruyu sorun: Belirli bir adımı mı biliyorum, yoksa toplam kaç örnek istediğimi mi?
| Ölçüt | arange | linspace |
|---|---|---|
| Kontrol edilen değer | Adım miktarı | Toplam değer sayısı |
| Bitiş değeri | Genellikle dahil edilmez | Varsayılan olarak dahil edilir |
| Sonuç türü | Tam sayı veya ondalık olabilir | Çoğunlukla ondalık değerler üretir |
| Uygun kullanım | Sayaç, indeks ve düzenli adımlı aralıklar | Grafik, simülasyon ve eşit aralıklı örnekleme |
| Dikkat edilmesi gereken nokta | Ondalık adımlarda eleman sayısı hassas olmayabilir | Üretilen değerler arasındaki adım ayrıca hesaplanır |
Örneğin 0 ile 1 arasında 0,1 adımlarla ilerlemek istiyorsanız
arange doğal seçimdir:
Python:
np.arange(0, 1, 0.1)
Ancak 0 ve 1 dahil olmak üzere tam 11 değer istiyorsanız
linspace daha açık ve güvenlidir:
Python:
np.linspace(0, 1, 11)
İki ifade matematiksel olarak benzer görünen sonuçlar verebilir; fakat amaçları aynı değildir.
arange(0, 1, 0.1) adım değerini temel alır. linspace(0, 1, 11) ise kaç değer üretileceğini temel alır ve uç noktaları açıkça kontrol eder. Tabloyu izleyen bu ayrım, özellikle grafik ekseni veya bilimsel hesaplama için önemlidir: örnek sayısı sabit olmalıysa linspace, adım aralığı sabit olmalıysa arange kullanın.Ondalık değerlerde neden linspace daha güvenli olabilir?
Bilgisayarlar birçok ondalık sayıyı ikili kayan nokta biçiminde tam olarak temsil edemez. Bu nedenle
np.arange(0, 1, 0.1) kullanıldığında bazı değerler bellekte 0.3 yerine 0.30000000000000004 gibi çok küçük gösterim farklarıyla tutulabilir. Bu durum çoğu hesaplamayı bozmaz; ancak eşitlik karşılaştırmalarında veya beklenen eleman sayısında sorun oluşturabilir.linspace doğrudan başlangıç, bitiş ve toplam örnek sayısını hedeflediği için iki uç nokta arasında eşit aralık oluşturmak istediğinizde daha uygundur. Örneğin bir eğri çizmek için x değerleri üretirken:
Python:
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
print(x.shape)
print(y.shape)
Beklenen çıktı şöyledir:
Kod:
(100,)
(100,)
Burada
x dizisi 0 ile 2π arasında 100 örnek içerir; y dizisi de her x değeri için sinüs sonucunu taşır. Bu kullanım, grafik veya sayısal örnekleme için uygun bir sabit örnek sayısı sağlar. Bununla birlikte linspace daha doğru bir bilimsel sonuç veya daha yüksek hassasiyet garantisi vermez; yalnızca değerlerin nasıl örnekleneceğini belirler.Kısa karar kuralı
Belirli bir sayı aralığında 2'şer, 5'er veya 0,1'er ilerlemek istiyorsanız
np.arange kullanın. Başlangıç ve bitiş arasında tam olarak 50, 100 veya başka bir sayıda eşit aralıklı örnek istiyorsanız np.linspace kullanın. Bitiş değerinin kesinlikle dahil edilmesi gereken ve toplam örnek sayısının bilindiği durumlarda linspace genellikle daha anlaşılır tercihtir.
Son düzenleme: