Saya memiliki array NumPy 'boolarr' dari tipe boolean. Saya ingin menghitung jumlah elemen yang nilainya True
. Apakah ada rutinitas NumPy atau Python yang didedikasikan untuk tugas ini? Atau, apakah saya perlu mengulangi elemen-elemen dalam skrip saya?
180
Jawaban:
Anda memiliki banyak opsi. Dua opsi adalah sebagai berikut.
Ini sebuah contoh:
Tentu saja, itu adalah
bool
jawaban yang spesifik. Secara umum, Anda dapat menggunakannumpy.count_nonzero
.sumber
bool
: nilai boolean diperlakukan sebagai 1 dan 0 dalam operasi aritmatika. Lihat " Nilai Boolean " dalam dokumentasi Python Standard Library. Perhatikan bahwa NumPy'sbool
dan Pythonbool
tidak sama, tetapi mereka kompatibel (lihat di sini untuk informasi lebih lanjut).numpy.count_nonzero
tidak berada dalam NumPy v1.5.1: Anda benar. Menurut pengumuman rilis ini , ditambahkan dalam NumPy v1.6.0.numpy.count_nonzero
sekitar seribu kali lebih cepat, paling tidak dalam interpreter Python saya.python -m timeit -s "import numpy as np; bools = np.random.uniform(size=1000) >= 0.5" "np.count_nonzero(bools)"
vs.python -m timeit -s "import numpy as np; bools = np.random.uniform(size=1000) >= 0.5" "sum(bools)"
np.sum(bools)
sebagai gantinya! Namun,np.count_nonzero(bools)
masih ~ 12x lebih cepat.Pertanyaan itu memecahkan pertanyaan yang sangat mirip bagi saya dan saya pikir saya harus berbagi:
Dalam python mentah, Anda dapat menggunakan
sum()
untuk menghitungTrue
nilai dalamlist
:Tetapi ini tidak akan berhasil:
sumber
Dalam hal membandingkan dua array numpy dan menghitung jumlah kecocokan (mis prediksi kelas yang benar dalam pembelajaran mesin), saya menemukan contoh di bawah ini untuk dua dimensi berguna:
yang dapat diperluas ke dimensi D.
Hasilnya adalah:
Ramalan:
Target:
Hitungan prediksi yang benar untuk D = 1:
1
Hitungan prediksi yang benar untuk D = 2:
2
sumber