打印所有列满足numpy数组中某个条件的行?

时间:2017-10-04 01:04:14

标签: python arrays numpy

我有一个包含500行和5列的数组。我需要找到最后4列中每一列中的值大于100的所有行。我找到了一种单独检查每列的方法,但我希望能够一次检查所有列。我尝试插入一个轴参数,但它给了我一个错误。必须有一种更简单的方法来做到这一点。这就是我可以开展的工作:

over1 = (array[:,1] >= 100)
over2 = (array[:,2] >= 100)
over3 = (array[:,3] >= 100)
over4 = (array[:,4] >= 100)
where = np.argwhere(over1&over2&over3&over4 == True)
there = array[where]
there2 = np.array(there[:,0]) 
#I had to reshape because the new array was a different shape for some reason

我是Python和Numpy的新手,所以我遇到了麻烦

1 个答案:

答案 0 :(得分:1)

我相信你一直在寻找:

x[(x[:, 1:] > 100).all(axis=1)]

考虑x

print(x)
array([[ 79, 192, 163,  94, 186],
       [111, 183, 152, 115, 171],
       [ 61, 125,  91, 163,  60],
       [110,  24,   0, 151, 180],
       [165, 111, 141,  19,  81]])

操作x[:, 1:] > 100在每个元素上广播操作,产生一个布尔矩阵。

print(x[:, 1:] > 100)
array([[ True,  True, False,  True],
       [ True,  True,  True,  True],
       [ True, False,  True, False],
       [False, False,  True,  True],
       [ True,  True, False, False]], dtype=bool)

np.all与内置函数all类似,如果每个元素都是True,则评估为True,否则评估为False。我们希望每行每列都执行此检查,因此我们需要axis=1

mask = (x[:, 1:] > 100).all(1)
print(mask)
Out[362]: array([False,  True, False, False, False], dtype=bool)

现在将使用蒙版索引原始蒙版。

x[mask]
array([[111, 183, 152, 115, 171]])