Garfield
YZF Admin
NumPy’de logaritmik aralıklı değerler oluşturmak için
Buradaki “eşit aralık”, normal sayılar arasındaki farkın eşit olduğu anlamına gelmez. Üsler eşit aralıklarla ilerler; gerçek değerlerin oranı eşit olur. Bu nedenle sonuçlar 1, 10, 100 gibi çarpanlarla büyür.
Beklenen çıktı yaklaşık olarak şöyledir:
Bu çıktıda ardışık değerlerin farkları eşit değildir; ancak ardışık değerlerin oranları yaklaşık olarak aynıdır. Örneğin bu beş değerli dizide her adımın oranı
Çıktı:
Son değeri aralığa dahil etmek istemezseniz
Bu durumda 1000 değeri üretilmez; örnekleme 1’den başlayıp 1000’e yaklaşır.
Bu kod 2⁰ ile 2¹⁰ arasındaki değerleri üretir. Yaklaşık çıktı şöyledir:
Burada beş eşit üs aralığı bulunduğu için her adımda 2’nin iki kuvveti kadar büyüme görülür. Kullanılan taban, çıktıların hangi büyüklük dizisini temsil ettiğini değiştirir.
Negatif veya sıfır değerler içeren bir aralığı doğrudan
np.logspace() kullanılır. Başlangıç ve bitiş değerlerini doğrudan değil, seçtiğiniz tabanda üs olarak verirsiniz. Örneğin np.logspace(0, 3, num=4) ifadesi 10⁰ ile 10³ arasına eşit aralıklı dört değer üretir: [1., 10., 100., 1000.] Böylece geniş büyüklük aralıklarını grafik, benzetim, performans testi veya parametre taraması için düzenli biçimde örnekleyebilirsiniz.logspace() nasıl çalışır?
Temel kullanım biçimi şöyledir:
Python:
import numpy as np
np.logspace(start, stop, num=50, endpoint=True, base=10.0)
start ve stop değerleri, oluşturulacak sayıların üsleridir. Varsayılan taban 10 olduğu için start=0 ve stop=3 aralığı 1 ile 1000 arasını ifade eder. num kaç değer üretileceğini, endpoint ise son değerin dahil edilip edilmeyeceğini belirler.Buradaki “eşit aralık”, normal sayılar arasındaki farkın eşit olduğu anlamına gelmez. Üsler eşit aralıklarla ilerler; gerçek değerlerin oranı eşit olur. Bu nedenle sonuçlar 1, 10, 100 gibi çarpanlarla büyür.
En küçük çalışan örnek
Aşağıdaki kod, 1 ile 1000 arasında logaritmik olarak eşit aralıklı beş değer oluşturur:
Python:
import numpy as np
degerler = np.logspace(0, 3, num=5)
print(degerler)
Beklenen çıktı yaklaşık olarak şöyledir:
Kod:
[ 1. 5.62341325 31.6227766 177.827941 1000. ]
Bu çıktıda ardışık değerlerin farkları eşit değildir; ancak ardışık değerlerin oranları yaklaşık olarak aynıdır. Örneğin bu beş değerli dizide her adımın oranı
10 ** (3 / (5 - 1)) ≈ 5,623 olur. Bu, 1 ile 1000 arasındaki büyüklükleri doğrusal aralıktan daha dengeli örneklemek için kullanılır.Birinci ve son değer nasıl belirlenir?
np.logspace(start, stop, num) için değerler kabaca şu formülle hesaplanır:
Kod:
base ** üs
start=2 ve stop=5 verilirse, varsayılan taban 10 için aralık 10² ile 10⁵, yani 100 ile 100.000 arasındadır:
Python:
degerler = np.logspace(2, 5, num=4)
print(degerler)
Çıktı:
Kod:
[ 100. 1000. 10000. 100000. ]
Son değeri aralığa dahil etmek istemezseniz
endpoint=False kullanın:
Python:
degerler = np.logspace(0, 3, num=4, endpoint=False)
print(degerler)
Bu durumda 1000 değeri üretilmez; örnekleme 1’den başlayıp 1000’e yaklaşır.
endpoint=False özellikle döngüsel örnekleme veya üst sınırın başka bir aralığın başlangıcıyla çakışmaması gereken durumlarda tercih edilir.logspace, linspace ve geomspace farkı
Hangi fonksiyonu kullanacağınız, aralığı hangi biçimde tanımlamak istediğinize bağlıdır. Aşağıdaki karşılaştırma aynı tür işlemi farklı matematiksel kurallarla yapar.| Fonksiyon | Aralık biçimi | Örnek | Uygun kullanım |
|---|---|---|---|
linspace() | Değer farkları eşit | 0, 25, 50, 75, 100 | Doğrusal ölçüm aralıkları |
logspace() | Üsler eşit, oranlar eşit | 1, 10, 100, 1000 | Belirli bir tabanda büyüklük taraması |
geomspace() | Başlangıç ve bitiş değerleri arasında oranlar eşit | 1, 10, 100, 1000 | Pozitif uç değerleri doğrudan belirtme |
linspace(1, 1000, 4) kullanırsanız değerler doğrusal olarak dağılır ve 1 ile 1000 arasındaki fark üç eşit aralığa bölünür; uçlar dahil dört nokta üretilir. logspace(0, 3, 4) ise üsleri böler. Başlangıç ve bitiş değerlerini üs olarak değil, doğrudan 1 ve 1000 olarak vermek istiyorsanız geomspace(1, 1000, 4) daha anlaşılır olabilir.Farklı tabanda logaritmik aralık oluşturma
Varsayılan taban 10’dur. İkilik büyüklükler veya başka bir üstel ölçek içinbase parametresini değiştirin:
Python:
ikilik_degerler = np.logspace(0, 10, num=6, base=2)
print(ikilik_degerler)
Bu kod 2⁰ ile 2¹⁰ arasındaki değerleri üretir. Yaklaşık çıktı şöyledir:
Kod:
[ 1. 4. 16. 64. 256. 1024. ]
Burada beş eşit üs aralığı bulunduğu için her adımda 2’nin iki kuvveti kadar büyüme görülür. Kullanılan taban, çıktıların hangi büyüklük dizisini temsil ettiğini değiştirir.
Üretilen değerleri bir hesaplamada kullanma
logspace() doğrudan NumPy dizisi döndürdüğü için değerleri vektör işlemlerinde kullanabilirsiniz. Örneğin, 1 ile 1000 arasında örneklenen değerlerin doğal logaritmasını hesaplamak için:
Python:
import numpy as np
x = np.logspace(0, 3, num=5)
y = np.log(x)
print(x)
print(y)
x logaritmik aralıklı giriş değerlerini, y ise bu değerlerin doğal logaritmasını içerir. num değerini artırmak daha sık örnekleme yapar; ancak bu, ölçümün veya modelin doğruluğunu tek başına artırmaz. Yalnızca aradaki örnek noktalarının sayısını artırır.Negatif veya sıfır değerler içeren bir aralığı doğrudan
logspace() ile tanımlayamazsınız; fonksiyon pozitif tabanın üslerini üretir. Ayrıca elde edilen dizinin logaritmik olması, kullandığınız sonraki hesaplamanın otomatik olarak logaritmik davranacağı anlamına gelmez. Aralığın temsil biçimini seçer; hesaplama modelini değiştirmez.