Saya mengalami kesulitan memahami dengan benar numpy.where()
meskipun membaca dokumen , pos ini dan pos lainnya ini .
Dapatkah seseorang memberikan contoh komentar langkah demi langkah dengan array 1D dan 2D?
Saya mengalami kesulitan memahami dengan benar numpy.where()
meskipun membaca dokumen , pos ini dan pos lainnya ini .
Dapatkah seseorang memberikan contoh komentar langkah demi langkah dengan array 1D dan 2D?
Jawaban:
Setelah bermain-main sebentar, saya mencari tahu, dan saya mempostingnya di sini berharap itu akan membantu orang lain.
Secara intuitif, np.where
seperti bertanya " beri tahu saya di mana dalam array ini, entri memenuhi kondisi yang diberikan ".
>>> a = np.arange(5,10)
>>> np.where(a < 8) # tell me where in a, entries are < 8
(array([0, 1, 2]),) # answer: entries indexed by 0, 1, 2
Itu juga dapat digunakan untuk mendapatkan entri dalam array yang memenuhi kondisi:
>>> a[np.where(a < 8)]
array([5, 6, 7]) # selects from a entries 0, 1, 2
Ketika a
array 2d, np.where()
mengembalikan array baris idx, dan array col idx:
>>> a = np.arange(4,10).reshape(2,3)
array([[4, 5, 6],
[7, 8, 9]])
>>> np.where(a > 8)
(array(1), array(2))
Seperti dalam kasus 1d, kita bisa menggunakan np.where()
untuk mendapatkan entri dalam array 2d yang memenuhi syarat:
>>> a[np.where(a > 8)] # selects from a entries 0, 1, 2
array ([9])
Catatan, ketika a
1d, np.where()
masih mengembalikan array baris idx dan array col idx, tetapi kolom panjangnya 1, jadi yang terakhir adalah array kosong.
np.where(2d_array)
, terima kasih telah membereskannya! Anda harus menerima jawaban Anda sendiri. e: Oh, sudah ditutup. Seharusnya tidak
np.where
untuk jawaban yang dinyatakan lengkap ini. Fungsi juga dapat memilih elemen dari array x dan y tergantung pada kondisinya. Ruang terbatas dalam komentar ini tetapi lihat: np.where(np.array([[False,False,True], [True,False,False]]), np.array([[8,2,6], [9,5,0]]), np.array([[4,8,7], [3,2,1]]))
akan kembali array([[4, 8, 6], [9, 2, 1]])
. Perhatikan elemen x dan y mana yang dipilih tergantung pada True / False
condition
disediakan, fungsi ini adalah singkatan untuk np.asarray(condition).nonzero()
.
Ini sedikit lebih menyenangkan. Saya telah menemukan bahwa NumPy sangat sering melakukan apa yang saya inginkan - kadang-kadang lebih cepat bagi saya untuk hanya mencoba sesuatu daripada membaca dokumen. Sebenarnya campuran keduanya adalah yang terbaik.
Saya pikir jawaban Anda baik-baik saja (dan tidak apa-apa untuk menerimanya jika Anda mau). Ini hanya "ekstra".
import numpy as np
a = np.arange(4,10).reshape(2,3)
wh = np.where(a>7)
gt = a>7
x = np.where(gt)
print "wh: ", wh
print "gt: ", gt
print "x: ", x
memberi:
wh: (array([1, 1]), array([1, 2]))
gt: [[False False False]
[False True True]]
x: (array([1, 1]), array([1, 2]))
... tetapi:
print "a[wh]: ", a[wh]
print "a[gt] ", a[gt]
print "a[x]: ", a[x]
memberi:
a[wh]: [8 9]
a[gt] [8 9]
a[x]: [8 9]