我有一个numpy数组,我需要对它进行筛选和求和。与我之前的问题类似,尽管这个问题需要通过两个条件进行筛选。
需要返回列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()
有什么想法吗?
python的and
查看条件两侧的布尔值。由于numpy
中的设计决策,值大于1的数组没有布尔值(如您所见,它会引发ValueError
。解决方案是使用np.logical_and
函数。
mask = np.logical_and(data[:, 0] == ptype, data[:, 8] <= radius)
np.sum(data[mask, 7])
注意,在这种情况下,&
的工作原理与布尔值数组的工作原理一样好——然而,我不喜欢像通常那样使用它(也不喜欢使用numpy),&
的意思是按位和,而不是按逻辑或。
您需要在NumPy数组中使用&
而不是and
:
mask = (data[:,0] == ptype) & (data[:,8] <= radius)
data[mask,7].sum()