按两个条件过滤numpy数组。不止一个元素含糊不清

时间:2014-10-14 01:56:45

标签: python arrays numpy

我有一个numpy数组,我需要过滤并执行求和。与我的previous question类似,虽然这个需要按两个条件进行过滤。

需要返回列7和列0 == ptype8 == radius的总和。

np.sum(data[data[:,0] == ptype and data[data[:,8] <= radius],7])

我收到以下错误:

The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

python的and查看条件任一侧的布尔值。由于numpy中的设计决策,具有多于1个值的数组没有布尔值(如您所见,它会引发ValueError。解决方案是使用np.logical_and函数

mask = np.logical_and(data[:, 0] == ptype, data[:, 8] <= radius)
np.sum(data[mask, 7])

请注意&在这种情况下也可以使用,因为你有布尔数组 - 但是,我不喜欢通常使用那个(和numpy一样),{{ 1}}表示按位和,而不是逻辑和

答案 1 :(得分:2)

您需要使用&代替and NumPy数组:

mask = (data[:,0] == ptype) & (data[:,8] <= radius)
data[mask,7].sum()