我有一个包含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的新手,所以我遇到了麻烦
答案 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]])