Обобщенная версия vecnorm - Matlab - PullRequest
0 голосов
/ 21 февраля 2019

Я обобщил функцию vecnorm для вычисления нормы по векторам, хранящимся в матрицах NxNx3.Я хотел бы сделать это быстрее, путем векторизации, но не смог этого сделать.Вот моя текущая функция

function [nr]=VecNorm(r)

N = size(r,1);
nr = zeros(N,N);

for i=1:N
    for j=1:N
        nr(i,j)=norm(reshape(r(i,j,:),[1 3]));
    end
end


end

Пример ввода / вывода

N=2;   

A = 4.*shiftdim( repmat( eye(3,3), 1, 1, N, N ), 2 );

c = ones(2,2);
V(1,1,:)=[1 2 3];
u = c.*V;

VecNorm(u)

ans =

3.7417    3.7417
3.7417    3.7417

1 Ответ

0 голосов
/ 21 февраля 2019

Если у вас есть хотя бы MATLAB R2017b, вы можете использовать для этого vecnorm:

vecnorm(u,2,3);

Третий аргумент указывает, по какому измерению брать векторы.

Если ваша версия MATLAB старше, вы можете вычислить то же самое с помощью:

sqrt(sum(u.^2,3));

Опять же, аргумент 3 - это размерность, по которой суммируется.

...