NumPy参考 >例行程序 >线性代数(numpy.linalg) > numpy.kron
numpy.
kron
(a,b )[源代码] ¶两个阵列的Kronecker乘积。
计算Kronecker乘积,它是由第二个数组的块按第一个数组缩放的复合数组。
也可以看看
outer
外部产品
笔记
该函数假定a和b的维数 相同,必要时在最小维数之前加上a。如果a.shape =(r0,r1,..,rN)和b.shape =(s0,s1,...,sN),则Kronecker乘积的形状为(r0 * s0,r1 * s1,...,rN * SN)。元素是a和b元素的乘积,其显式组织为:
kron(a,b)[k0,k1,...,kN] = a[i0,i1,...,iN] * b[j0,j1,...,jN]
哪里:
kt = it * st + jt, t = 0,...,N
在普通的二维情况下(N = 1),可以看到块结构:
[[ a[0,0]*b, a[0,1]*b, ... , a[0,-1]*b ],
[ ... ... ],
[ a[-1,0]*b, a[-1,1]*b, ... , a[-1,-1]*b ]]
例子
>>> np.kron([1,10,100], [5,6,7])
array([ 5, 6, 7, ..., 500, 600, 700])
>>> np.kron([5,6,7], [1,10,100])
array([ 5, 50, 500, ..., 7, 70, 700])
>>> np.kron(np.eye(2), np.ones((2,2)))
array([[1., 1., 0., 0.],
[1., 1., 0., 0.],
[0., 0., 1., 1.],
[0., 0., 1., 1.]])
>>> a = np.arange(100).reshape((2,5,2,5))
>>> b = np.arange(24).reshape((2,3,4))
>>> c = np.kron(a,b)
>>> c.shape
(2, 10, 6, 20)
>>> I = (1,3,0,2)
>>> J = (0,2,1)
>>> J1 = (0,) + J # extend to ndim=4
>>> S1 = (1,) + b.shape
>>> K = tuple(np.array(I) * np.array(S1) + np.array(J1))
>>> c[K] == a[I]*b[J]
True