【发布时间】:2019-12-07 03:09:09
【问题描述】:
我有两个形状相同的矩阵数组 A 和 B: A.shape = B.shape = (M,N,P)
我想沿轴 0 计算克罗内克积,这样:
KP[ii,:,:] = A[ii,:,:]⊗B[ii,:,:]
有没有办法在 numpy 中做到这一点而不使用 for 循环?
谢谢!
例子:
A = np.array([ [[1,0],
[0,1]],
[[1,0],
[0,1]]
])
B = np.array([ [[1,0],
[0,-1]],
[[0,1],
[1,0]]
])
KP = np.array( [
[[1,0,0,0],
[0,-1,0,0],
[0,0,1,0],
[0,0,0,-1]],
[[0,1,0,0],
[1,0,0,0],
[0,0,0,1],
[0,0,1,0]]
] )
相当于:
KP= np.zeros( (A.shape[0],
A.shape[1]**2,
A.shape[2]**2) )
for ii in range(A.shape[0]):
KP[ii,:,:] = np.kron(A[ii,:,:],B[ii,:,:])
【问题讨论】:
-
那么
KP会有什么形状呢? -
你能用
(2, 2, 2)数组之类的东西创建一个愚蠢的例子吗,我不确定你到底想要什么。 -
KP.shape = (M,N^2,P^2)
-
np.kron(A, B)[:A.shape[0]] - 这只是因为 A 由对称块组成
-
@SoslanTabuev 你的意思是相同的块?
标签: python-3.x numpy numpy-ndarray array-broadcasting