なぜそれがfor文の代わりになるのかがわかりません。
np.newaxis を for文の代わりにするわけではありません。
原理としては、 [1,2,3,…,9] の縦ベクトルA と[1,2,3,…,9] の横ベクトルBを要素毎の掛け合わせることで九九の表行列Xができあがります。
Xの各要素 X[i,j] は A[i] * B[j] にて算出されますので九九のが完成します
Python
1import numpy as np
2A = np.array([[1,2,3,4,5,6,7,8,9]])
3B = np.array([[1],[2],[3],[4],[5],[6],[7],[8],[9]])
4print(A*B)
5 => [[ 1 2 3 4 5 6 7 8 9]
6 [ 2 4 6 8 10 12 14 16 18]
7 [ 3 6 9 12 15 18 21 24 27]
8 [ 4 8 12 16 20 24 28 32 36]
9 [ 5 10 15 20 25 30 35 40 45]
10 [ 6 12 18 24 30 36 42 48 54]
11 [ 7 14 21 28 35 42 49 56 63]
12 [ 8 16 24 32 40 48 56 64 72]
13 [ 9 18 27 36 45 54 63 72 81]]
横行列A および縦行列B は np.arange() と np.newaxis を使うとそれぞれ
Python
1A = np.arange(1,10)[np.newaxis, :]
2# => [[1,2,3,4,5,6,7,8,9]])
3B = np.arange(1,10)[:, np.newaxis]
4# => [[1],[2],[3],[4],[5],[6],[7],[8],[9]]
のように生成することができるので、これを一行にまとめると
X = np.arange(1,10)[np.newaxis,:] * np.arange(1,10)[:,np.newaxis]
となるということになります。
九九の一部の生成する場合は np.arange() の引数で範囲を指定します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/04/24 12:42
2017/04/24 14:26