numpy advanced tutorial np.where ve np.piecewise

Metni girin

Bir, np. Ayrıntılı açıklama burada

detaylı olarak nerede

Where function tanımı

1.1

numpy.where (koşul)

Yalnızca koşul belirtilmişse, condition.nonzero () döndürür.

Parametreler: durum : array_like, bool

Doğru olduğunda, x verir, aksi takdirde y verir.

x, y : dizi_like, isteğe bağlı

Aralarından seçim yapılacak değerler. X, y ve koşul bir şekle yayınlanabilir olmalıdır.

İadeler: dışarı : ndarray veya ndarray demeti

Hem x hem de y belirtilirse, çıktı dizisi koşulun True olduğu x'in öğelerini ve başka yerlerdeki y'den öğeleri içerir.

Yalnızca koşul verilirse, koşulun True olduğu indisler olan tuple condition.nonzero () 'yu döndürün.

Açıklama:

koşul: Bu işlev gerekli bir parametre koşulunu kabul edebilir, parametrenin dizi türünde olması gerektiğini, ancak öğenin doğru veya yanlış olduğunu unutmayın

x, y isteğe bağlı parametrelerdir: Koşul doğruysa, x'i döndür, koşul yanlışsa y'yi döndür. Koşul, x ve y'nin aynı şekle "yayın yapabilmesi" gerektiğini unutmayın.

Dönüş sonucu: Döndürülen şey, elemanları dizi olan bir dizi veya tuple dizisidir.Sadece bir koşul varsa, diziyi içeren tuple döndürülür ve üç parametre varsa, bir dizi döndürülür. Daha sonra ayrıntılı olarak açıklanacaktır.

detaylı olarak nerede

Yalnızca bir parametre koşulu olduğunda

1.2

1.2.1 Koşul tek boyutlu olduğunda

a = np.array () a_where = np.where (a > 5) # Dizine dön, a > 5 bir dizidir. baskı (a_where) print (a) # a, boole endeksine eşdeğer b = np.array () baskı (np.where (b))

Yazdırılan sonuç aşağıdaki gibidir:

(dizi (, dtype = int64),)

# Döndürülen 2,3,4, elemanı 5'ten (True) büyük olan elemanın, yani diziler olarak döndürülen 3., 4. ve 5. elemanların dizin konumuna karşılık gelir.

---------------------------------

---------------------------------

(dizi (, dtype = int64),)

# Öğedeki True öğeye, yani bir dizi biçiminde döndürülen 2. ve 4. öğelere karşılık gelen konum dizinini döndürür.

1.2.2 Koşul iki boyutlu olduğunda

a = np.array () # İki boyutlu dizi a_where = np.where (a > 3) baskı (a_where) baskı (a)

Sonuç şu şekildedir:

(dizi (, dtype = int64), array (, dtype = int64))

İlk döndürülen sonuç için, bir demet döndürdüğünü, demetin ilk öğesinin bir dizi olduğunu ve değerinin koşulu karşılayan öğenin satır dizininden geldiğini görebiliriz, iki 0 satır Evet, üç adet 1 satır, dört adet 2 satır ve beş adet 3 satır; atanın ikinci öğesi de bir dizidir ve değeri, koşulu karşılayan öğenin sütun dizininden gelir.

Başka bir örneğe bakın

b = np.where () baskı (b)

Dönen sonuç şudur:

(dizi (, dtype = int64), array (, dtype = int64))

# Döndürülen hala bir demettir, ilk öğe satırdan türetilen bir dizidir ve ikinci öğe de sütundan türetilen bir dizidir. Bunun seçim koşulunu silmediğine dikkat edin, çünkü where parametresi bir şey yerine b'dir, b > 1, b > 2 gibi Boole ifadelerinin sorunu nedir? Aslında, daha fazla işlenmiştir. 0 öğeler yanlış olarak kabul edilir ve 0'dan büyük tüm öğeler doğru olarak kabul edilir, bu da aşağıdaki işlem sonucuyla tamamen tutarlıdır eşdeğer.

c = np.array () baskı (np.where (c))

Çıktı:

(dizi (, dtype = int64), array (, dtype = int64))

#Yukarıdaki gibi

1.2.3 Koşul çok boyutlu olduğunda

a = a = np.array (a) print (a.shape) #Şekil (2,3,3) a_where = np.where (a > 3) baskı (a_where)

Sonuç şu şekildedir:

(dizi (, dtype = int64),

dizi (, dtype = int64),

dizi (, dtype = int64))

Yukarıdakinin aynısı, dönüş bir demettir, ilk öğe dizi türüdür, birinci boyutun koşulunu karşılayan dizinden türetilir, ikinci öğe dizi türüdür, ikinci boyutun koşulunu karşılayan dizinden türetilir ve üçüncü öğe Öğe, üçüncü boyuttaki koşulu karşılayan dizinden türetilen bir dizi türüdür.

Bu bölümün özeti

sonuç olarak:

Yukarıdaki açıklamayla ilgili olarak, koşulu karşılayan bir dizideki öğenin dizinini (True) döndürmenin rolü ve dönüş değeri bir demet tipidir.Tuple'ın her bir öğesi bir dizi türüdür ve dizinin değeri belirli bir enleme karşılık gelir. Dizinde.

Bir parametre koşulu verildiğinde, np.where (condition) ve condition.nonzero () tamamen eşdeğerdir.

detaylı olarak nerede

Üç parametre koşulu olduğunda, x, y

1.3
a = np.arange (10) a_where = np.where (a, 1, -1) baskı (a_where) a_where_1 = np.where (a > 5,1, -1) baskı (a_where_1) b = np.where (, # İlk parametre , #Second parametresi # Üçüncü parametre ) baskı (b)

Sonuç şu şekildedir:

İlk sonuç için , Yalnızca birincisi 0 olduğundan, bu yanlıştır, -1 ile değiştirilir ve ikincisi 0'dan büyüktür, bu da doğrudur, dolayısıyla 1 ile değiştirilir.

İkinci sonuç için , İlk 6 yanlıştır, bu nedenle -1 ile değiştirin ve son dördü doğrudur, sonra 1 ile değiştirin.

Üçüncü sonuç için,

--------------------------------------

İlk True'ya karşılık gelen dizin konumu (0,0) 'dır, doğru ikinci parametrede aranır, (0,0) eleman 1'e karşılık gelir

İkinci yanlışa karşılık gelen dizin konumu (0,1) 'dir, yanlış üçüncü parametrede aranır, (0,1) öğe 8'e karşılık gelir

Üçüncü True'ya karşılık gelen dizin konumu (1,0) 'dır, doğru ikinci parametrede aranır, (0,0) eleman 3'e karşılık gelir

Dördüncü True'ya karşılık gelen dizin konumu (1,1) 'dir, doğru ikinci parametrede aranır, (0,0) öğe 4'e karşılık gelir

Bu bölümün özeti

Özet: Üç parametre kullanırken, bu koşula dikkat edin, x ve y'nin aynı boyutlara sahip olması veya aynı şekilde yayınlanması gerekir, aksi takdirde bir hata rapor edilecektir.Gönderilen sonuç, orijinal koşulla aynı olan bir listedir. Boyutlar ve şekiller.

Özet: Yukarıdaki açıklama sayesinde, esasen bir seçim işlemi olan np.where fonksiyonunun gücünü öğrendik, ancak koşullu işlemi kendimiz yazarsak, if-else gibi ifadeler kullanırsak veya ifadeleri listelersek, verimsizdir. , Bu nedenle np.where kullanmanız önerilir

Sonraki

İkincisi, np.piecewise ayrıntılı açıklama

np.piecewise ayrıca daha önce bahsedilen Where, select, select gibi gelişmiş bir uygulamadır ve uygulanan işlevler benzerdir, yani ilgili koşullara göre filtreler ve ardından farklı koşullardaki öğeler üzerinde ilgili işlemleri gerçekleştirir. İşlemler kaynak ve işlevler, lambda ifadeleri vb. Olabilir ve yeni sonuçlar alabilir.

Ayrıntılı parça parça

Parçalı tanımı

2.1

numpy.piecewise (x, condlist, funclist, * args, ** kw)

Parçalı tanımlanmış bir işlevi değerlendirin.

Bir dizi koşul ve karşılık gelen işlevler verildiğinde, her işlevi koşulunun doğru olduğu yerde girdi verilerinde değerlendirin.

Parametreler: x : ndarray veya skalar

Giriş alanı.

koşul listesi : bool dizilerinin veya bool skalerlerinin listesi

Her boole dizisi, funclist içindeki bir işleve karşılık gelir. Condlist nerede olursa olsun Doğru, funclist (x) çıktı değeri olarak kullanılır.

Condlist'teki her boole dizisi bir x parçası seçer ve bu nedenle x ile aynı şekilde olmalıdır.

Koşul listesinin uzunluğu funclist'in uzunluğuna karşılık gelmelidir Ekstra bir işlev verilirse, yani iflen (funclist) == len (condlist) + 1, o zaman bu ekstra işlev tüm koşulların yanlış olduğu yerlerde kullanılan varsayılan değerdir.

funclist : çağrılabilirlerin listesi, f (x, * args, ** kw) veya skalarlar

Her işlev, karşılık gelen koşulu True olduğunda x üzerinden değerlendirilir. Girdi olarak 1d dizisini almalı ve çıktı olarak 1d dizisi veya skaler bir değer vermelidir. Çağrılabilir yerine bir skaler sağlanırsa sabit bir işlev (lambda x: skaler) varsayılır.

argümanlar : tuple, isteğe bağlı

Parçalı olarak verilen diğer argümanlar, çalıştırma sırasında işlevlere iletilir, yani parça parça (..., ..., 1, 'a') olarak adlandırılırsa, her bir işlev f (x, 1, 'a' olarak adlandırılır. ).

kw : dikte, isteğe bağlı

Parçalı çağırmada kullanılan anahtar kelime argümanları, çalıştırma sırasında işlevlere iletilir, yani, parça olarak çağrılırsa (..., ..., alpha = 1), o zaman her işlev f (x, alpha = 1) olarak adlandırılır.

İadeler: dışarı : ndarray

Çıktı, x ile aynı şekil ve türdedir ve koşul listesindeki boolean dizileri tarafından tanımlandığı gibi, x'in uygun bölümlerinde funclist içindeki işlevlerin çağrılmasıyla bulunur.Herhangi bir koşul tarafından kapsanmayan bölümlerin varsayılan değeri 0'dır.

Parametre bir x: çalıştırılacak nesneyi temsil eder

Parametre iki: koşul listesi, birden çok koşulun bir listesi olabilecek karşılanması gereken koşulların bir listesi anlamına gelir

Üçüncü parametre: funclist, gerçekleştirilecek işlemlerin listesi, ikinci parametre ve üçüncü parametre karşılık gelir, ikinci parametre doğru olduğunda karşılık gelen işlem işlevi yürütülür.

Dönüş değeri: orijinal işlem nesnesiyle tam olarak aynı boyutlara ve şekle sahip bir dizi nesnesi döndürür x

Ayrıntılı parça parça

Parçalı pratik durum

2.2

2.2.1 Birinci Durum

x = np.arange (0,10) baskı (x) xx = np.piecewise (x ,,) baskı (xx)

Sonuç şu şekildedir:

Yani, 4'ten küçük olan öğeler -1 ile değiştirilir ve 6'dan büyük veya eşit olanlar 1 ile değiştirilir ve geri kalanlar varsayılan olarak 0 ile doldurulur. Aslında, buradaki değiştirme ve doldurma işlevdir, ancak buradaki işlev ve basit ve kaba olan aynı sayı ile değiştirilmiştir. Aslında, yukarıdaki kod aşağıdaki koda tamamen eşdeğerdir:

x = np.arange (0,10) def func1 (y): dönüş -1 def func2 (y): dönüş 1 xxx = np.piecewise (x ,,) baskı (xxx)

Sonuç şu şekildedir:

#Yukarıdaki gibi

2.2.2 Durum 2: İşlem işlevini tanımlayarak

x = np.arange (0,10) #Elements kare def func2 (y): dönüş 1ef func1 (y): dönüş y ** 2 #Element 100 ile çarpılır def func2 (y): dönüş y * 100 xxx = np.piecewise (x ,,) baskı (xxx)

Sonuç şu şekildedir:

2.2.3 Durum 3: Lambda ifadesini tanımlayarak

x = np.arange (0,10) xxxx = np.piecewise (x ,,) baskı (xxxx)

Sonuç şu şekildedir:

Bu bölümün özeti

Özet: Parçalı işleme yöntemi hızlı ve kullanışlıdır, kendi başınıza döngüleri ve koşullu ifadeleri yazmaktan çok daha etkilidir, daha fazla kullanmanız önerilir.

Sonraki

Tam metin özeti

Önceki seçme ve seçme işlevleri dahil olmak üzere Numpy'nin nerede ve parçalı işlevleri, özellikle veri analizi ve işleme için özellikle önemlidir.Tanıma uygun gelişmiş işlevler, döngüleri ve koşullu ifadeleri kullanmak için python kodu yazmaktan daha etkilidir. Bununla birlikte, ilgili belgeleri baştan sona ayrıntılı olarak tanıtan çok az makale var, bu yüzden bu iki makaleyi yazdım. Diğerine bakın, umarım ihtiyaç sahiplerine yardımcı olur.Umarım bir öneriniz varsa, olumlu geri dönüşler öneririz. Burada teşekkür ederim!

Çin Donanması'nın "Aegis Tiantuan" askeri geçit töreninde göründü.Yıldız gemilerinin hepsi hazır!
önceki
Gelişmiş matplotlib çiziminin ayrıntılı açıklaması
Sonraki
Koleksiyonda 5.000'den fazla antik kitapla, Zhongshan'ın gizli topluluğundaki halka açık kitap dükkanının hikayesi nedir?
Makine öğrenimi hakkında bilmeniz gereken 3 popüler profesyonel terim
GitHub'da yüz teknolojisi ile ilgili kaynakların tanınması, tespiti, kalibrasyonu, yeniden yapılandırılması, oluşturulması vb.
Pazarın başı dertte değil, insanların kalbinde
Öğretmen tarafından özenle seçilmiş 8 iyi kitap, herkes dikkatlice okuyabilir (ayrıca bir PDF e-kitap hediyesi de vardır)
"My Boy 2" Olimpiyat şampiyonunu tekrar karşılıyor, Wu Dajing ilk olarak aşk hayatından bahsediyor
SpringCloud Dağıtılmış SpringCloud 2.x Serisi SpringSession Oturumu
Spring Cloud 2.x serisinin bahar bulutunda yay önbelleği nasıl kullanılır
Kadın net kırmızı çiçek 30 bin burun estetiği ameliyatı sonrası çirkin arkadaşlar tarafından güldü, öfkeyle açığa çıktı: düğün randevum ertelendi
Spring Cloud 2.x serisi devre kesici kümesi izleme Tur.
Wu Xin, bir takım elbise ve güneş gözlüğü, havalı ve şık bir şekilde günlük giyimini paylaşıyor
SpringCloud2.x serisinin Springboot entegrasyonu F
To Top