在matlab中无需for循环处理矩阵

在matlab中无需for循环处理矩阵,matlab,loops,matrix,Matlab,Loops,Matrix,我在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 您可以这样做: x=[2 3 4;2 3 2;4 5 6]; magnit

我在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

您可以这样做:

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

您可以这样做:

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

A
成为您的矩阵

  • 如果“每第n行”是指行
    1
    n+1
    2*n+1
    ,…:

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


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

A
成为您的矩阵

  • 如果“每第n行”是指行
    1
    n+1
    2*n+1
    ,…:

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

在这两种情况下,如果
A
是真实的,您可以删除
abs

,该功能也可以帮助您。调用输入矩阵的
A
n
行步骤:

result = sqrt(dot(A(1:n:end,:), A(1:n:end,:), 2));
但是请注意,如果
A
是复杂的,那么结果将是复杂的,它只相当于一个实矩阵。

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

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

但是请注意,如果
A
是复杂的,那么结果将是复杂的,它只相当于一个实矩阵。

如何定义一行的大小?你的意思是那一行中每个数字的大小吗?向量每个dim的平方和的根。仅供参考:你如何定义一行的大小?你的意思是那一行中每个数字的大小吗?向量每个dim的平方和的根。仅供参考:现在我想要的是不。我不明白。我的解决方案是你想要的吗?对不起,我的错误,你的解决方案没有返回与我发布的结果相同的结果。好的,现在我明白你的意思了,一开始这个代码不存在。路易斯密码似乎是这个案子的正确答案。不,现在是我想要的。我不明白。我的解决方案是你想要的吗?对不起,我的错误,你的解决方案没有返回与我发布的结果相同的结果。好的,现在我明白你的意思了,一开始这个代码不存在。在这种情况下,Luis代码似乎是正确的。步骤n是不必要的。@JoseRamon从您问题中的措辞来看,它似乎是正确的。我已经编辑了答案步骤n是不必要的。@JoseRamon从你问题的措辞来看,似乎是这样。我已经编辑了答案