Проблема в том, что MATLAB не распознает, что переменная k
правильно разрезает матрицу in
.Решение должно заключаться в индексировании in
с использованием i
и j
отдельно:
N = size(A,1);
M = size(v,1);
in = zeros(M,N);
parfor i=1:N
for j=1:M
if sqrt(sum((A(i,:)-v(j,:)).^2))<=tol
in(j,i) = i;
end
end
end
in = in(:); % reshape to a column vector, as the output in the question's code
Другая альтернатива, но для нее требуется больше промежуточной памяти, это вычислить это вообще без цикла:
A = reshape(A,1,N,[]);
v = reshape(v,M,1,[]);
in = sum(bsxfun(@minus,A,v).^2,3) < tol*tol;
in = in(:);
(или что-то подобное, я не запускал этот код ... Пожалуйста, дайте мне знать или исправьте сообщение, если есть опечатка или другая ошибка.)