我有一个numpy数组,我需要过滤并执行求和。与我的previous question类似,虽然这个需要按两个条件进行过滤。
需要返回列7
和列0 == ptype
列8 == 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()
有什么想法吗?
答案 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()