python 3.6.3 / numpy 1.13.3 / ubuntu 17.10
我是numpy的新手,面临布尔索引的一些问题。 这是我的测试数组:
>>> b
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
我想获取值为[5,6,7,8,9]
的行>>> np.all(b==( 5, 6, 7, 8, 9), axis=1)
array([False, True, False, False], dtype=bool)
并且它有效,索引为1的行匹配。
现在我想获得值为[4,9,14,29]的列,并尝试使用:
>>> np.all(b==( 4, 9, 14, 19), axis=0)
False
但结果不是预期的(至少是我),因为我希望得到一个布尔数组,如:
array([False, False, False, False, True], dtype=bool)
告诉我有一个索引为4的匹配列。
我的猜测出了什么问题?
答案 0 :(得分:0)
np.all
测试沿给定轴的所有数组是否都计算为true,因此当您进行第二次比较时,它首先将第二个数组与2d数组的所有行进行比较,并根据if将它们设置为true或false。他们相等。
之后,它检查沿着给定轴(在0的情况下是列轴)的所有数组(布尔)是否现在评估为真,它们不是(作为原始的2d数组行大小并传递数组& #39; s大小不匹配所以一切都是假的)因此np.all
也返回false。
试试这个
np.all(b.T==( 4, 9, 14, 19), axis=0)
答案 1 :(得分:0)
您应该使用数组来执行此操作。并牢记正确的尺寸:
In [17]: col = np.array(( 4, 9, 14, 19)).reshape(-1, 1)
In [18]: b == col
Out[18]:
array([[False, False, False, False, True],
[False, False, False, False, True],
[False, False, False, False, True],
[False, False, False, False, True]], dtype=bool)
然后:
In [22]: (b == col).all(axis=0)
Out[22]: array([False, False, False, False, True], dtype=bool)