Rumah >pembangunan bahagian belakang >Tutorial Python >Cara Menapis Tatasusunan Numpy dengan Berbilang Syarat: Mengapa `np.where()` Gagal dan Cara Mencapai Keputusan yang Betul?
numpy where Berfungsi dengan Berbilang Syarat
Dalam numpy, fungsi where membenarkan untuk menapis tatasusunan berdasarkan keadaan. Walau bagaimanapun, apabila cuba menggunakan berbilang syarat menggunakan operator logik seperti & dan |, hasil yang tidak dijangka mungkin berlaku.
Pertimbangkan kod berikut:
import numpy as np dists = np.arange(0, 100, 0.5) r = 50 dr = 10 # Attempt to select distances within a range result = dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
Kod ini cuba memilih jarak antara r dan r dr. Walau bagaimanapun, ia hanya memilih jarak yang memenuhi syarat kedua, dists <= r dr.
Sebab Kegagalan:
Fungsi numpy where mengembalikan indeks elemen yang memenuhi syarat, bukan tatasusunan boolean. Apabila menggabungkan berbilang pernyataan di mana menggunakan operator logik, output ialah senarai indeks yang memenuhi syarat masing-masing. Melakukan dan operasi pada senarai ini menghasilkan set indeks kedua, dengan berkesan mengabaikan syarat pertama.
Pendekatan Betul:
Untuk menggunakan berbilang syarat, gunakan perbandingan mengikut unsur secara terus:
dists[(dists >= r) & (dists <= r + dr)]
Sebagai alternatif, buat tatasusunan boolean untuk setiap keadaan dan lakukan operasi logik padanya:
condition1 = dists >= r condition2 = dists <= r + dr result = dists[condition1 & condition2]
Pengindeksan mewah juga membolehkan penapisan bersyarat:
result = dists[(condition1) & (condition2)]
Dalam kes tertentu, memudahkan syarat menjadi satu kriteria mungkin berfaedah, seperti dalam contoh berikut:
result = dists[abs(dists - r - dr/2.) <= dr/2.]
Oleh memahami gelagat fungsi where, pengaturcara boleh menapis tatasusunan dengan berkesan berdasarkan berbilang keadaan dalam numpy.
Atas ialah kandungan terperinci Cara Menapis Tatasusunan Numpy dengan Berbilang Syarat: Mengapa `np.where()` Gagal dan Cara Mencapai Keputusan yang Betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!