【发布时间】:2021-11-16 22:40:05
【问题描述】:
是一个 ndarray,例如。 g.:
a = np.random.randn(Size)
Where Size >> 1. 是否可以定义一个数组 b s.t.它的第 i 个元素依赖于 a 到 i 的所有元素(排除或包含不是问题)而没有 for 循环?
b[i] = function(a[:i])
所以如果函数只是 np.sum(a[:i]) 我想要的输出将是:
for i in range(1, Size):
b[i] = np.sum(a[:i])
我能想到的唯一解决方案是编写相应的C代码并包装它,但是有一些python原生解决方案可以避免它吗???
我强调总和只是一个例子,我正在寻找对任意函数的概括,但是,可以通过 numpy 数学函数(例如 np.exp())逐元素表示
【问题讨论】:
-
那么您是否尝试使用 Python 解决它并且太慢了?您发布的代码是 O(n^2),它可以在 O(n) 中完成,用于求和和乘法等简单操作。
-
许多
ufunc都有一个accumulate方法。np.cumsum基本上是np.add.accumulate。但是如果你不能使用其中一个,或者一些巧妙的组合,并且你仍然想要速度,你将需要编写某种编译代码。numba现在似乎是首选工具。 -
@DaniMesejo 这正是重点......
-
@hpaulj 您应该将其发布为答案,我认为您正确地抓住了重点,并且推理对我有用
标签: python numpy vectorization