3

蟒蛇,麻木

有没有更紧凑的方法来操作数组元素,而不必使用标准的 for 循环。?

例如,考虑下面的函数:

filterData(A):
    B = numpy.zeros(len(A));
    B[0] = (A[0] + A[1])/2.0;
    for i in range(1, len(A)): 
        B[i] = (A[i]-A[i-1])/2.0;
    return B;
4

2 回答 2

5

Numpy 有一个diff 运算符,适用于 numpy 数组和 Python 原生数组。您可以将代码重写为:

def filterData(A):
    B = numpy.zeros(len(A));
    B[1:] = np.diff( A )/2.0
    B[0] = (A[0] + A[1])/2.0;
    return B
于 2012-12-30T03:38:53.163 回答
1

还有numpy.ediff1d,它允许您使用to_endandto_begin参数显式地预先或附加到差异,例如:

>>> import numpy as np
>>> a = np.arange(10.)
>>> diff = np.ediff1d(a,to_begin = a[:2].sum()) / 2.
>>> diff
array([ 0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5,  0.5])
>>> diff.size
10
于 2013-02-10T14:57:42.767 回答