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;
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
また、とパラメータnumpy.ediff1d
を使用して明示的に diff の先頭または末尾に追加できるもあります。たとえば、次のようになります。to_end
to_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