在Matlab中向量化成对Kronecker乘积

用户3030046

假设有两个大小相同的矩阵,我想计算它们按列的克罗内克积的总和。由于有时列的尺寸很大,因此速度可能很慢。因此,是否有矢量化该功能的方法,或者任何功能都可以帮助降低matlab的复杂性?提前致谢。

下面提供了带有for循环的相应matlab代码,而答案d是感兴趣的输出:

A = rand(3,7);
B = rand(3,7);
d = zeros(size(A,1)*size(B,1),1);
for i=1:size(A,2)
    d = d + kron(A(:,i),B(:,i));
end
折腾

使用Daniels Answer给出的Kronecker产品的重写

e=zeros(size(B,1),size(A,1));
for i=1:size(A,2)
    e = e + B(:,i)*A(:,i).';
end
e=reshape(e,[],1);

我们说

C = A'

因此

for i=1:m
    e = e + B(:,i)*C(i,:);
end

这是矩阵乘积的定义

B*C.

总之,可以通过简单的矩阵乘积来解决问题

d = reshape(B*A',[],1);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章