【发布时间】:2021-06-23 10:03:52
【问题描述】:
我需要对集合中的一个指标函数求和。
sum() 可以直接在 np.array 上使用,没有问题。
import numpy as np
y = np.arange(10)
ans = sum(y % 2 == 0)
但是,sum() 不能直接用于 python 列表。
z = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ans = sum(z % 2 == 0)
另一方面,这适用于 np.array 和 python 列表。
ans = sum(each % 2 == 0 for each in z)
print(ans)
问题是为什么? np.array 和 python 列表都应该是可迭代的。是什么让 np.array 支持附加语法?
【问题讨论】:
-
这只是
numpy.array定义了__mod__运算符,而pythonlist没有(docs.python.org/3/library/operator.html) -
你很困惑。
sum可以很好地用于list对象和np.ndarray对象,但是,您永远不应该在nd.array对象上使用sum函数。您应该直接在数组上使用np.sum函数或.sum方法,所以改为(y % 2 == 0).sum()。 原因 您的代码不适用于list对象是因为%不适用于列表对象,因此z % 2 == 0失败。这与可迭代的列表无关。列表对象不支持像 numpy 数组这样的向量化操作。 -
主题行中的错误明显指向
%,而不是总和。