3

Python、Numpy

標準の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には、numpy配列とPythonネイティブ配列の両方で機能するdiff演算子があります。コードを次のように書き直すことができます。

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を使用して明示的に diff の先頭または末尾に追加できるもあります。たとえば、次のようになります。to_endto_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 に答える