Numpy where Fungsi dengan Pelbagai Keadaan
Apabila berurusan dengan tatasusunan, fungsi np.where dalam NumPy boleh menjadi alat yang berguna untuk memilih tertentu unsur berdasarkan syarat tertentu. Walau bagaimanapun, kekeliruan boleh timbul apabila cuba menggunakan berbilang syarat secara serentak.
Pertimbangkan senario yang dibentangkan dalam soalan: matlamatnya ialah untuk memilih jarak dalam julat tertentu daripada tatasusunan yang dipanggil dist. Kod berikut telah dicuba:
dists[(np.where(dists >= r)) and (np.where(dists <= r + dr))]
Walau bagaimanapun, kod ini hanya memilih jarak yang kurang daripada atau sama dengan r dr, bukan kedua-dua syarat. Untuk memahami sebab ini berlaku, adalah penting untuk ambil perhatian bahawa np.where mengembalikan senarai indeks, bukan tatasusunan boolean.
Membetulkan Kod
Cara yang betul untuk gunakan berbilang syarat dengan np.where adalah untuk mencipta tatasusunan boolean gabungan menggunakan pengendali mengikut unsur (& untuk DAN, | untuk ATAU), seperti yang ditunjukkan di bawah:
dists[(dists >= r) & (dists <= r + dr)]
Atau, jika hasilnya diperlukan secara khusus dalam bentuk indeks, gunakan sintaks berikut:
np.where((dists >= r) & (dists <= r + dr))
Mengapa Kod Asal Tidak Berfungsi
Jujukan kod yang terlibat dalam soalan asal menilai dua keadaan berasingan secara bebas: pertama, jarak lebih besar daripada atau sama dengan r, dan kemudian jarak kurang daripada atau sama dengan r dr. Walau bagaimanapun, kerana np.where mengembalikan indeks, menggabungkan keputusan kedua-dua syarat ini menggunakan dan menghasilkan pemilihan indeks sahaja daripada syarat kedua.
Untuk mencipta tatasusunan boolean yang menggabungkan syarat, mengikut elemen operator digunakan. Ini memastikan bahawa setiap elemen dalam tatasusunan adalah sama ada Betul atau Salah berdasarkan kedua-dua keadaan secara serentak.
Pendekatan Alternatif
Kaedah alternatif untuk memilih jarak dalam julat adalah dengan gunakan pengindeksan bersyarat, seperti yang ditunjukkan di bawah:
dists[abs(dists - (r + dr / 2.)) <= dr / 2.]
Pilihan ini menyediakan penyelesaian yang lebih ringkas dan boleh dibaca dengan mencipta tatasusunan boolean yang menyemak sama ada setiap jarak berada dalam julat berpusat pada r.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan fungsi `np.where` NumPy untuk memilih elemen berdasarkan berbilang syarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!