我在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
答案 0 :(得分:3)
让A
成为你的矩阵。
如果"每第n行"表示行1
,n+1
,2*n+1
,...:
result = sqrt(sum(abs(A(1:n:end,:)).^2, 2));
如果它只是意味着"每一行":
result = sqrt(sum(abs(A).^2, 2));
在任何一种情况下,如果A
是真实的,您可以删除abs
。
答案 1 :(得分:1)
你可以这样做:
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
答案 2 :(得分:1)
operator<<
功能也可以帮助您。调用A
输入矩阵,n
行步骤:
result = sqrt(dot(A(1:n:end,:), A(1:n:end,:), 2));
但请注意,如果A
很复杂,结果会很复杂,只相当于dot
的真实矩阵。