0
큰 행렬을 가지고 있는데,이 행렬을 A라고 부르 자. M = 4000 행 × 3 열. 행렬의 각 행에는 세 개의 숫자가 들어 있습니다. [241 112 478]. 이 세 숫자 중 세 쌍을 구성 할 수 있습니다 (예 : [241 112], [112 478], [241 478]. 다른 3999 개의 행 중 :MATLAB 큰 행렬에서 3 개의 원소 중 2 개가 포함 된 행을 효율적으로 찾습니다.
- 세 쌍 각각에 대해 정확히 한 행의 M (하나만 포함)은 동일한 쌍을 포함합니다. 그러나 숫자 순서는 뒤죽박죽 일 수 있습니다. 예를 들어, 정확히 한 행에 [333 478 112]가 표시됩니다. 다른 행에는 478과 112가 둘 다 없을 것입니다. 3 개 쌍 각각에 대해 해당 행의 색인을 찾는 데 관심이 있습니다. 그런 다음 출력은 다른 행렬이어야하며, 동일한 크기 4000x3으로 B라고 부릅니다. 여기서 각 행은 원래 행렬 A의 행 인덱스를 가지고 숫자 쌍을 공유합니다.
- 다른 행에는 동일한 세 개의 숫자가 포함되지 않습니다.
- 다른 행에는 숫자 또는 숫자 중 하나가 포함될 수 없습니다.
다음은이 작업을 수행하는 기능이지만 매우 느립니다.보다 효율적인 방법이 있는지 알고 싶습니다. 미리 감사드립니다! 루프가 필요하지 않은 경우
M=size(A,1); % no elements
B=zeros(M,3);
for j=1:M
l=1;
k=1;
while l<4 % there cant be more than 3
if k~=j
s=sum(ismember(A(j,:),A(k,:)));
if s==2
B(j,l)=k;
l=l+1;
end
end
k=k+1;
end
굉장하고, 훨씬 빠르게 작동합니다! 감사! – Kurt