【发布时间】:2018-07-09 05:37:54
【问题描述】:
我尝试在我的工作中使用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);
第一种方法我可能会使用循环,但如果我有一个大矩阵,它就没有效率。知道我的错误是什么吗?
【问题讨论】:
-
这可以通过一个简单的 for 循环来解决。为什么不呢?
-
嗯,这 100 个切片只是一个例子,在现实世界中我处理的切片超过 50K。所以为了将来的证明,我可能想开始矢量化我的代码:)
-
矢量化 != 快。 MATLAB 的 JIT 编译器非常好,通常 for 循环也同样快。
-
好的,但由于矢量化代码不起作用,我无法比较并做出决定
-
@GregorIsack “过早的优化是万恶之源”-Donald Knuth。为什么要优化一段您不知道它是否对您的应用程序至关重要的代码?
标签: matlab multidimensional-array