【问题标题】:Process a matrix in matlab without for loop在没有for循环的matlab中处理矩阵
【发布时间】:2015-06-09 12:14:46
【问题描述】:

我在 matlab 中有一个矩阵 Nx3 维度。我想计算矩阵的每 n 行的范数。但是我想在不使用 for 循环的情况下执行范数计算。有没有办法这样做?我的 for 循环代码:

for i=1:length(accelerometer)
   magnitude(i,:) = sqrt(accelerometer(i,1)^2 + accelerometer(i,2)^2+   accelerometer(i,3)^2);
end

【问题讨论】:

  • 如何定义行的大小?您是指该行中每个数字的大小吗?
  • 向量每个暗角的平方和的根。
  • 仅供参考:norm

标签: matlab loops matrix


【解决方案1】:

A 成为你的矩阵。

  • 如果“每 n 行”表示行 1n+12*n+1、...:

    result = sqrt(sum(abs(A(1:n:end,:)).^2, 2));
    
  • 如果它只是意味着“每一行”:

    result = sqrt(sum(abs(A).^2, 2));
    

在任何一种情况下,如果A 是真实的,您可以删除abs

【讨论】:

  • 步骤 n 不是必需的。
  • @JoseRamon 从您问题中的措辞看来似乎是这样。我已经编辑了答案
【解决方案2】:

你可以这样做:

x=[2 3 4;2 3 2;4 5 6];

magnitude=sum(x')';

ans =

     9
     7
    15

如果 x 在任何时候都是复数:

x=[2 3 4;2 3 2;4 5 6+1i];

magnitude_Complex=abs(sum(x')');


ans =

    9.0000
    7.0000
   15.0333

【讨论】:

  • 不,现在是我想要的。
  • 我不明白。我的解决方案是你想要的吗?
  • 抱歉我的错误,您的解决方案与我发布的结果不同。
  • 好的,现在我明白你的意思了,一开始这段代码是不存在的。在这种情况下,Luis 代码似乎是正确的。
【解决方案3】:

dot 函数也可能对您有所帮助。调用 A 你的输入矩阵和 n 行步:

result = sqrt(dot(A(1:n:end,:), A(1:n:end,:), 2));

但请注意,如果A 是复数,则结果将是复数,它仅对实矩阵等价于this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多