假设有两个大小相同的矩阵,我想计算它们的列向克隆克积的总和。由于有时列的大小很大,所以速度可能很慢。因此,是否存在向量化函数,或者任何函数都可以帮助降低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发布于 2015-08-30 00:56:16
使用丹尼尔斯答案给出的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);发布于 2015-08-28 21:52:30
两个向量的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);现在知道它只是一个产品之和,可以使用bsxfun将其放入一行
f=reshape(sum(bsxfun(@times,permute(B,[1,3,2]),permute(A,[3,1,2])),3),[],1);根据输入的不同,bsxfun比矩阵乘法略快一些,但这会带来较高的内存消耗。bsxfun解决方案使用O(size(A,1)*size(B,1)*size(B,2)),而for-循环除了输入参数外只使用O(size(A,1)*size(B,1))。
https://stackoverflow.com/questions/32280002
复制相似问题