【问题标题】:Unary Operation Using For Loops In Matlab在 Matlab 中使用 For 循环的一元运算
【发布时间】:2014-02-08 12:35:49
【问题描述】:

我正在尝试在 MatLab 的 for 循环中做一些基本的算术运算。

基本上我想一个一个地复制和操作每个元素。首先我想从每个元素中减去 3.6:testDataMean,将每个元素提升到 2 的幂,然后对每个变量求和。最后将变量s 除以5 (sizeOfTestData)

这应该计算大约 ~1.05。

testData 变量是一个 1x5 向量,包含数字 3, 4, 2, 5, 4

   s = 0;

for k = 1:sizeTestData
    p = testData(k);
    q = p - testDataMean;
    r = q^2;
    s = s + r;
    s/5;

end

这个循环实际上在最后一行s = s + r 上抛出了一个错误。我知道在大多数情况下对相同大小的向量进行操作时,我可以使用 sum 函数,但在 for 循环的上下文中我不确定。

【问题讨论】:

  • 错误是什么? “矩阵尺寸必须一致”?
  • 对不起,“未定义函数或变量's'”
  • 嗯,你有你的答案。将s = 0 放在循环前面。

标签: matlab for-loop unary-operator


【解决方案1】:

请注意,sum(s) / numel(s) 的定义与 mean(s) 相同。

无循环方法:

testData = [3, 4, 2, 5, 4]
q = testData - mean(testData);
s = mean(q.^2);
s = 1.0400

单线:

s = mean((testData-mean(testData)).^2)
s = 1.0400

你最初的方法:

(修复错误后)

testData = [3, 4, 2, 5, 4]

s = 0;
sizeTestData = length(testData);
testDataMean = mean(testData);

for k = 1:sizeTestData
   p = testData(k);
   q = p - testDataMean;
   r = q^2;
   s = s + r;  
end
s = s / numel(s);
s = 1.0400

【讨论】:

  • 感谢您的回复。抱歉,我最后错过了一个关键点,即将汇总变量 s 除以 5。我已经编辑了我原来的帖子以适应。
  • 谢谢,我会试试你的解决方案,但是这就是我想要的。我只是在练习 RMSE(均方根误差)的概念。
  • @user1574598:高效的 Matlab 编程很大程度上是尽可能避免循环。因此,Daniel 的单线法不仅是一种计算 RMSE 的方法,而且是 Matlab 计算 RMSE 的方法。除了可以做得更短:s = var(testData, 1) ;-)
  • 谢谢,了解避免循环很有用 :-) 我会继续练习,希望能变得更好。令人惊奇的是,6-8 行代码可以减少到 1 行!
猜你喜欢
  • 1970-01-01
  • 2017-08-21
  • 2013-12-21
  • 2015-04-20
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多