【发布时间】:2012-09-02 15:18:01
【问题描述】:
我试图通过删除我用来计算矩阵 X 每一行的公式的 for 循环来了解是否可以更有效地使用 Octave:
myscalar = 0
for i = 1:size(X, 1),
myscalar += X(i, :) * y(i) % y is a vector of dimension size(X, 1)
...
公式比添加到标量更复杂。这里的问题实际上是如何在没有索引的情况下遍历 X 行,这样我就可以消除 for 循环。
【问题讨论】:
-
我不明白你的代码应该做什么。在每个循环中,它只是将向量
X(i,:)乘以标量y(i)。你的myscalar实际上是一个向量。除非 X 只有一列,但为什么要设置它?你为什么要为乘法转置?另外,没有必要使用size (X, 1),Octave 已经有了rows和columns的功能。 -
我的问题实际上是关于那个 for 循环,而不是任何代码。确实,转置很混乱,所以我要修复它,但是有没有办法删除索引和 for 循环?
-
可能是的,但我不能告诉你怎么做,因为代码没有意义。
myscalar应该是标量吗?乘法之和?矩阵?什么大小的?我不明白你想要什么。 -
好的,我修复了 myscalar,但我不明白为什么专注于代码如此重要。这是一个普遍的问题,有没有办法在对每一行或每一列而不是每个元素应用公式时避免矩阵索引(在这种情况下矢量化更明显)?
-
现在说得通了。我不明白
myscalar发生了什么,因为您之前只是覆盖它,而不是添加它(=而不是+=)。
标签: octave vectorization