假设我有一个for循环,使用范围如下所示。有没有一个好的方法来消除for循环并且只使用numpy数组?你知道吗
y =[146, 96, 59, 133, 192, 127, 79, 186, 272, 155, 98, 219]
At=3
Bt=2
Aindex=[]
Bindex=[]
for i in range(len(y)-1):
A =At
B =Bt
At =y[i] / y[i] + 5 * (A + B)
Aindex.append(At)
Bt =(At - A) + y[i+1] * B
Bindex.append(Bt)
我会用这样的东西
c=len(y)-1
Aindex=y[:c]/y[:c]+5* (A + B)
但是A和B在循环中更新。我也不知道如何矢量化Bt方程中的y[I+1]
您在Iterating over a numpy array with enumerate like function中询问了类似的问题,只是
A
和B
没有改变。你知道吗严格地说,你不能矢量化这个例子,因为
Bt
中的变化。这是一个迭代问题,其中i+1
项依赖于i
项。大多数numpy
向量操作(有效地)同时对所有项进行操作。你知道吗你能重做这个问题,使它利用
cumsum
和/或cumprod
吗?这些是内置的方法,通过一个向量(或一个数组的轴)逐步计算一个累积和或积。numpy's
这个的概括是ufunc.accumulate
。http://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.accumulate.html
同时,我建议更多地使用数组
numpy
使用nditer
将多个数组(包括一个输出数组)单步遍历在一起。http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html尽管我怀疑它在处理多维数组时更有用。对于1d阵列来说,这可能是杀伤力过大。不过,如果速度变得至关重要,您可以阅读本文档,并在cython
中实现该问题。你知道吗相关问题 更多 >
编程相关推荐