【发布时间】:2015-11-19 10:35:13
【问题描述】:
我有一个矩阵 A:“M x N”。我想在矩阵中运行一个函数,
例如,回归:让每一列是 Y,其余列是 Xs
for i=1:N
Y = A(:,i); % let Y be the "i"th columns
X = A; X(:,i)=[]; % let X be other columns
coef(:,i)=regress(Y,X);
end
我想知道是否有任何matlab函数能够处理循环中的函数
【问题讨论】:
-
查看了
regress,看起来它对于矢量化来说已经足够复杂了,所以如果你问我,可能不值得。但是在列出的代码级别进行优化时,您可以在进入循环之前预先计算X并迭代使用它。 -
如果您的数据中没有很多/任何
NaN,您可以使用coeff(:,i)=X\Y。可能比regress更快。使用qr解决系统甚至可能比反斜杠更快。 @Divakar 你怎么看?这会带来更多的矢量化魔法吗? -
@David 好好研究
regress,它似乎很少有范数计算,可以应用矢量化,但那里的性能瓶颈似乎是tinv,我猜这是反斜杠你在说什么。不确定是否可以在那里使用qr,因为我不太了解它或与它们相关的性能数据。 -
如果
qr可以使用,this solution可能值得一看。 -
我想要一些可以在每个循环中得到两个矩阵(“一列”和“其他列”)的想法。我觉得可能有比 for 循环更好的解决方案。您是否有任何想法,例如,将它们转移到 X 和 Y 单元阵列中?其中每个 X 单元是一个 X 矩阵(矩阵 A 减去一列),每个 Y 单元是一个 Y 向量