按两个条件筛选numpy数组.多个元素不明确



我有一个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()

最新更新