rabbitfoot530's diary

読んだ本と、プログラムに関することのメモです。好きな言語は、C++, Python, Golang, TypeScript。数学・物理・学習理論も好きです。

reduce, accumulate

  • reduce

行の数が1つまとめられて、各列の値が加算される。

In [43]: a = np.mat('1 2 3; 4 5 6; 7 8 9')
In [44]: a
Out[44]: 
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])

In [46]: np.add.reduce(a)
Out[46]: matrix([[12, 15, 18]])

イメージとしては、1列目〜x行目までを列ごとに合計した値。

matrix([[1,↓ 2,↓ 3↓],
        [4,↓ 5,↓ 6↓],
        [7,↓ 8,↓ 9↓]])
        12,  15,  18
  • accumulate

行の数は変わらず、各列の値が加算される。

In [48]: a
Out[48]: 
matrix([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]])

In [49]: np.add.accumulate(a)
Out[49]: 
matrix([[ 1,  2,  3],
        [ 5,  7,  9],
        [12, 15, 18]])

イメージとしては、2行目の値は、1行目と2行目の値の加算の結果

matrix([[1,↓ 2,↓ 3↓],
        [4, 5, 6],
        [7, 8, 9]])

3行目の値は、1行目と2行目の列の値の加算の結果。
Cの配列で書くなら下記のようになる。

a[2][0] = a[0][0] + a[1][0]
a[2][1] = a[0][1] + a[1][1]
a[2][2] = a[0][2] + a[1][2]