在2D numpy数组中找到匹配的行ok,匹配2D numpy数组中的列不行

时间:2017-11-09 00:06:21

标签: python arrays numpy

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的匹配列。

我的猜测出了什么问题?

2 个答案:

答案 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)