三维矩阵的每个切片与二维矩阵的乘法

时间:2018-01-30 10:54:11

标签: matlab multidimensional-array

我尝试在我的工作中使用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);

我可能会在第一种方法中使用循环,但如果我有一个大矩阵则效率不高。知道我的错误是什么吗?

1 个答案:

答案 0 :(得分:0)

以下是矢量化解决方案。

不确定它是否比使用循环更快;即使它是,请注意它使用更多的记忆进行中间计算:

result = permute(sum(permute(conj(U), [1 3 4 2]).*b), [4 2 3 1]);