numpyのテンソル(配列)関係
numpy.transpose(a, axes=None)
配列の足の順番を入れ替える。
a:入れ替えたい配列
axes:順番の指定(指定なしなら、逆順になる)
import numpy as np a = np.arange(24).reshape((2,3,4)) print a.shape print np.transpose(a).shape print a.transpose().shape print np.transpose(a,(1,0,2)).shape
(2, 3, 4)
(4, 3, 2)
(4, 3, 2)
(3, 2, 4)
np.transpose(a)でもa.transpose()でも同じ役割
axesを指定しなければa[a_1,a_2,...,a_N]をa[a_N,...,a_2,a_1]に入れ替える。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html
掛け算
a*b = np.multiply(a,b) は要素積
np.dot(a,b)は行列積(a,bが高次のテンソルの場合はaの最後の足とbの最後から2番目の足について掛ける)。
他にもいろいろな種類の掛け算が用意されてる。
multiply or *は基本的にa,bの配列の次元は同じでなければならない。
c[i,j,k,l] = a[i,j,k,l]b[i,j,k,l]
同じでない場合は、片方がスカラー
c[i,j,k,l] = ab[i,j,k,l]
もしくは、1次元配列
c[i,j,k,l] = a[l]b[i,j,k,l] #1次元配列と一方の配列の最後の要素の掛け算になる
でないとだめっぽい。
また、a*bとb*aは同じものを返すっぽい。
import numpy as np A = np.arange(24).reshape((2,3,4)) B = np.array([1,2,3,4]) print A.shape print B.shape print (A*B).shape print (B*A).shape print np.multiply(A, B).shape
(2, 3, 4)
(4,)
(2, 3, 4)
(2, 3, 4)
(2, 3, 4)
http://ibisforest.org/index.php?python%2Fnumpy
http://docs.scipy.org/doc/numpy/reference/generated/numpy.multiply.html
【追記】任意の軸に関する要素積について、別に記事を書いたので、必要なら参照:
http://oppython.hatenablog.com/entry/2014/10/23/024831