1

配列の2行ごとに合計する方法を理解したいと思います。例えば、この例では a を b に変換します。

a=array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

b=array([[ 4,  6,  8, 10],
       [20, 22, 24, 26]])

現在のコードは次のようになります。

b=[]
for num in range(len(a)/2):
    b.append(a[num*2]+a[num*2+1])

きっともっと速い方法があるはずです。お時間をいただきありがとうございます。

答えは次のように見つかりました:

b=a[::2,:]+a[1::2,:]

これは実際に、最初の 2 行をスキップする方法の二次的な問題を拡大するのに役立ちます。

>>> a=np.arange(24).reshape(6,-1)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
>>> b=np.vstack((a[:2],a[2::2,:]+a[3::2,:]))
>>> b
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [20, 22, 24, 26],
       [36, 38, 40, 42]])

助けてくれてありがとう。

4

1 に答える 1

10

スライスで救出!スライスへのストライドを指定するだけで、準備は完了です。

b = a[::2,:] + a[1::2,:]

デモ:

>>> from numpy import *
>>> a=array([[ 0,  1,  2,  3],
...        [ 4,  5,  6,  7],
...        [ 8,  9, 10, 11],
...        [12, 13, 14, 15]])
>>>
>>> a[::2,:]
array([[ 0,  1,  2,  3],
       [ 8,  9, 10, 11]])
>>>
>>> a[1::2,:]
array([[ 4,  5,  6,  7],
       [12, 13, 14, 15]])
>>>
>>> a[::2,:] + a[1::2,:]
array([[ 4,  6,  8, 10],
       [20, 22, 24, 26]])
于 2012-11-15T18:53:15.120 に答える