나는 각 벡터의 각 요소 사이의 최소 제곱 거리를 행렬의 항목으로 삼는 3 개의 벡터 중 3 차원 행렬을 작성하려고합니다. 3 차원 매트릭스 D에 대한 예를 들어 루프없이 3D 최소 제곱 거리 매트릭스를 작성 하시겠습니까?
,d(m,n,o)=(vec1(m)-vec2(n))^2+(vec1(m)-vec3(o))^2+(vec2(n)-vec1(o))^2
나는 현재 루프 트리플로이 일을하고있다 :
d=zeros(N,M,O);
for o=1:O
for n=1:N
for m=1:M
d(n,m,o)=(((t(n)-r(m))^2)+((t(n)-z(o))^2)+((r(m)-z(o))^2));
end
end
end
내 질문 할 수있는 빠르고, 영리한 방법이 있는지 여부입니다 예를 들어 이것을 사용할 수있는 2D 버전의 경우 :
%for n=1:N
% for m=1:M
% d(n,m)=(t(n)-r(m))^2;
% end
%end
d=(repmat(t(:),1,M)-repmat(r(:)',N,1)).^2; %this replaces the nested for loops from above Thanks Georg Schmitz
게오르그 슈미츠가 등장한 사람 repmat을 사용하여 2d 버전의 이중 for 루프를 대체하는 방법이 있습니다. 나는 물론이 방법을 적용 할 수 있고 반복을위한 repmat 메서드 (o) 횟수를 반복하는 하나의 루프를 사용하여 루프에 대한 내 트리플을 대체 할 수 있지만 루프없이이 작업을 수행해야하는 것처럼 느껴집니다.
아이디어가 있으십니까? 감사합니다
아 멋지다, 나는 bsxfun을 사용하는 것을 고려했지만 두 개의 인수 max를 해결할 방법을 찾지 못했습니다. – user1185474