おっぱいそん!

pythonを数値計算に使うときのテクニックとかをまとめていきたい。

外積

Numpyで外積を計算する方法をまとめておく。

ベクトル(1次元配列)同士の外積、つまり
c[i,j] = a[i]b[j]
はnumpy.outerを使って、
http://docs.scipy.org/doc/numpy/reference/generated/numpy.outer.html

import numpy as np
a = np.ones(3)
b = np.arange(2)
print np.outer(a,b)

とできる。


高次元配列の外積
numpy.multiply.outer もしくは numpy.einsumを使うといい。
numpy.multiply.outerはmultiplyの部分を別の演算子に変更することも出来る。
参考:
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.outer.html
http://docs.scipy.org/doc/numpy/reference/generated/numpy.einsum.html
http://stackoverflow.com/questions/24839481/python-matrix-outer-product

例:c[i,j,k] = a[i]b[j,k]

a = np.ones(2)
b = np.arange(12).reshape((3,4))

print a.shape, b.shape
print np.multiply.outer(a,b).shape
print np.outer(a,b).reshape(2,3,4).shape
print np.einsum('a,bc->abc',a,b).shape

(2,) (3, 4)
(2, 3, 4)
(2, 3, 4)
(2, 3, 4)