很显然,该运算不遵守交换律。
import numpy as np
a = np.eye(3)
b = np.ones((3,2,3))
c = np.kron(a,b)
a
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
b
array([[[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.]],
[[ 1., 1., 1.],
[ 1., 1., 1.]]])
c
array([[[ 1., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 1., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 1., 1., 1.],
[ 0., 0., 0., 0., 0., 0., 1., 1., 1.]],
[[ 1., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 1., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 1., 1., 1.],
[ 0., 0., 0., 0., 0., 0., 1., 1., 1.]],
[[ 1., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 1., 1., 1., 0., 0., 0., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 1., 1., 1., 0., 0., 0.],
[ 0., 0., 0., 0., 0., 0., 1., 1., 1.],
[ 0., 0., 0., 0., 0., 0., 1., 1., 1.]]])
import numpy as np
a = np.array([1,2,0])
b = np.array([1,0,0])
c = np.cross(a,b)
import numpy as np
a = np.array([1,2,3,4])
b = np.ones([3,1])
c = np.outer(a,b)
d = np.kron(a,b)
c
array([[ 1., 1., 1.],
[ 2., 2., 2.],
[ 3., 3., 3.],
[ 4., 4., 4.]])
d
array([[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.],
[ 1., 2., 3., 4.]])
如果b改成1×3,那么该例d为1×12:
array([[ 1., 1., 1., 2., 2., 2., 3., 3., 3., 4., 4., 4.]])