Numpy配列の各要素の演算

NumPy 配列、たとえば 1, 2, ..., 9、のそれぞれの要素の積、1x1, 1x2, 1x3, ..., 9x8, 9x9、をどうやって求めるか?もちろんループでもできるが、もっと簡単な方法があった。

まずは、NumPy をインポートし、配列を作る。

import numpy as np

a = np.arange(1, 10)
print(a)
# -----
[1 2 3 4 5 6 7 8 9]

もとの配列の後ろに次元を 1 つ追加する。

a_9x1 = a[ : , np.newaxis ]
print(a_9x1)
# -----
[[1]
 [2]
 [3]
 [4]
 [5]
 [6]
 [7]
 [8]
 [9]]

もとの配列の前に新しい次元を追加したものも作る。

a_1x9 = a[ np.newaxis, : ]
print(a_1x9)
# -----
[[1 2 3 4 5 6 7 8 9]]

前と後ろに次元を追加した配列を掛けると、それぞれの要素を掛けた結果になる。

a_9x9 = a_9x1 * a_1x9
print(a_9x9)
# -----
[[ 1  2  3  4  5  6  7  8  9]
 [ 2  4  6  8 10 12 14 16 18]
 [ 3  6  9 12 15 18 21 24 27]
 [ 4  8 12 16 20 24 28 32 36]
 [ 5 10 15 20 25 30 35 40 45]
 [ 6 12 18 24 30 36 42 48 54]
 [ 7 14 21 28 35 42 49 56 63]
 [ 8 16 24 32 40 48 56 64 72]
 [ 9 18 27 36 45 54 63 72 81]]

[1] * [1 2 3 4 5 6 7 8 9]
[2] * [1 2 3 4 5 6 7 8 9]
. . . . .
[9] * [1 2 3 4 5 6 7 8 9]

を NumPy が計算してくれる。