我尝试在我的工作中使用svd
,它将返回如下的矢量。
A=rand(10,5);
b=rand(10,5,100);
[U, S , V]=svd(A);
我要做的是将b
的每个切片与U
相乘。使用一个特定切片,此操作有效:
c=U'*b(:,:,1);
但是当我尝试使用如下的矢量化方法时,它会返回数组尺寸不匹配错误。
Utran=U.';
c = cellfun(@(x) x.*b,num2cell(Utran,[1 2]),'UniformOutput',false);
我可能会在第一种方法中使用循环,但如果我有一个大矩阵则效率不高。知道我的错误是什么吗?
答案 0 :(得分:0)
以下是矢量化解决方案。
不确定它是否比使用循环更快;即使它是,请注意它使用更多的记忆进行中间计算:
result = permute(sum(permute(conj(U), [1 3 4 2]).*b), [4 2 3 1]);