Cara Menapis Tatasusunan Numpy dengan Berbilang Syarat: Mengapa `np.where()` Gagal dan Cara Mencapai Keputusan yang Betul?

Barbara Streisand
Lepaskan: 2024-10-26 10:27:02
asal
292 orang telah melayarinya

 How to Filter Numpy Arrays with Multiple Conditions: Why `np.where()` Fails and How to Achieve Correct Results?

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))]
Salin selepas log masuk

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:

  • Elemen- Perbandingan bijak:

Untuk menggunakan berbilang syarat, gunakan perbandingan mengikut unsur secara terus:

dists[(dists >= r) & (dists <= r + dr)]
Salin selepas log masuk
  • Tasusunan Boolean:

Sebagai alternatif, buat tatasusunan boolean untuk setiap keadaan dan lakukan operasi logik padanya:

condition1 = dists >= r
condition2 = dists <= r + dr
result = dists[condition1 & condition2]
Salin selepas log masuk
  • Pengindeksan Fancy:

Pengindeksan mewah juga membolehkan penapisan bersyarat:

result = dists[(condition1) & (condition2)]
Salin selepas log masuk

Dalam kes tertentu, memudahkan syarat menjadi satu kriteria mungkin berfaedah, seperti dalam contoh berikut:

result = dists[abs(dists - r - dr/2.) <= dr/2.]
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan