檢查 a,b 的值是否為 1,2 和 c,d 的值是否為 3,4 然后列印它
a b c d e f
[[ 1. 2 3. 4 1. 9.935]
[ 1. 2 3. 4 0.9 9.403]
[ 1. 2 3. 4 0.8 8.785]
[ 1. 2 10. 15 0.8 192.523]
[ 1. 2 10. 15 0.7 176.913]
[ 1. 2 10. 15 0.6 158.936]]
我目前正在做的是
xx2 = a[np.where(a[:,0] == 1)]
print(xx2)
但它列印第一列為 1 的所有行
uj5u.com熱心網友回復:
您可以對陣列進行切片,然后使用行相等性檢查:
mask = (a[:, 0:4] == [1,2,3,4]).all(1)
>>> a[mask]
array([[1. , 2. , 3. , 4. , 1. , 9.935],
[1. , 2. , 3. , 4. , 0.9 , 9.403],
[1. , 2. , 3. , 4. , 0.8 , 8.785]])
順便說一句,制作一個可以通過簡單的復制/粘貼復制的示例總是一個好主意。我花了更多的時間來調整你的例子而不是找出答案(每一分鐘,所以我們很好)。
可重現的設定
a = np.array([
[1, 2, 3, 4, 1, 9.935],
[1, 2, 3, 4, 0.9, 9.403],
[1, 2, 3, 4, 0.8, 8.785],
[1, 2, 10, 15, 0.8, 192.523],
[1, 2, 10, 15, 0.7, 176.913],
[1, 2, 10, 15, 0.6, 158.936]])
解釋
對陣列進行切片/索引以僅保留要檢查的列:
>>> a[:, :4]
array([[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 10., 15.],
[ 1., 2., 10., 15.],
[ 1., 2., 10., 15.]])
請注意,在您的情況下,四列是連續的。如果他們不是呢?說我們要檢查(d,a,c,b) == (4,1,3,2)?在這種情況下,將選擇指定為tuple第二維上的a :
>>> a[:, (3,0,2,1)]
array([[ 4., 1., 3., 2.],
[ 4., 1., 3., 2.],
[ 4., 1., 3., 2.],
[15., 1., 10., 2.],
[15., 1., 10., 2.],
[15., 1., 10., 2.]])
通過使用運算子的廣播,將所選列的行與所需的目標進行比較==:
>>> a[:, (3,0,2,1)] == [4,1,3,2]
array([[ True, True, True, True],
[ True, True, True, True],
[ True, True, True, True],
[False, True, False, True],
[False, True, False, True],
[False, True, False, True]])
但是我們希望所有值(在每一行上)都匹配,所以:
mask = (a[:, (3,0,2,1)] == [4,1,3,2]).all(1)
>>> mask
array([ True, True, True, False, False, False])
從那時起,您只需選擇a[mask]并獲取您的子集陣列,其中所有選定的列都與您想要的目標相匹配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317011.html
上一篇:將元組與其中的陣列進行比較
下一篇:單獨計算求和引數
