행렬 B 1631x5가 있습니다. Download matfile중복 값의 인덱스를 찾아서 Matlab에서 인덱스를 대체하십시오.
열 2와 3은 각각 X 좌표와 Y 좌표를 나타냅니다.
B (i + k, 2) == B (i + j, 2) & B (i + k, 3) == B (i + j, 3) 인 인덱스를 식별하고 싶습니다. 두 개 이상의 복제본이있을 수 있습니다. duplicate_ind (1x149)와 duplicate_value (149x2) : 코드가 실행되면
%% X coordinate
[~, indX] = unique(B(:, 2), 'rows');
% duplicate indices
duplicate_indX = setdiff(1:size(B, 1), indX);
% duplicate values
duplicate_valueX = B(duplicate_indX, 2);
%% Y coordinate
[~, indY] = unique(B(:, 3), 'rows');
% duplicate indices
duplicate_indY = setdiff(1:size(B, 1), indY);
% duplicate values
duplicate_valueY = B(duplicate_indY, 3);
%% Both coordinates
duplicate_ind=intersect(duplicate_indX,duplicate_indY);
duplicate_value = B(duplicate_ind, 2:3);
, 우리는이 행렬을 얻을 :
다음은 중복을 식별하는 스크립트입니다.
find(B(:,2)==duplicate_value(1,1))
ans =
1
61
>> find(B(:,2)==duplicate_value(2,1))
ans =
57
77
:이 인덱스에 대한
>> duplicate_ind(1:4)
ans =
61 77 106 111
에 해당하는 값이 지금은 원본과 복제본을 찾을 수 있습니다
>> duplicate_value(1:4,:)
ans =
355.3035 176.9755
364.7316 182.2644
354.4987 202.1553
350.5895 226.7602
있습니다
의 예로 들어 duplicate_ind의 처음 4 개 값을 생각해 보자
이 경우 원래 값의 색인은 1이고 사본의 색인 다른 경우에는 : 원본 : 57 및 중복 : 77.
이제 중복 된 색인을 원래 색인으로 교체하고 싶습니다. 우리의 경우 61은 1로 대체됩니다 (77은 57로 대체됩니다). 위의 고려, 내가 크기 1631x3이있는 매트릭스를 구축하려는 (매트릭스 B로 같은 수의 행이 있어야 함), 및 다음과 같습니다 :
1 1 2
2 2 3
3 3 4
...
57 57 58
...
61 1 62
...
77 57 78
78 78 79
...
이 질문을 정의 "당신이 무엇을 요구하고 있는지 불분명합니다." 지금은 매우 혼란 스럽기 때문에 다시 말하십시오. –
Welcome To Stack Overflow! 현재이 질문은 다소 모호합니다. 당신이 의미하는 바를 명확히하기 위해 질문을 편집하십시오. 스택 오버플로는 코드 작성 서비스가 아니기 때문에 최소한 입력을 포함하고 [mcve]에 코드를 포함하십시오. 마지막으로 [ask]에 대한 정보를 얻으실 수 있습니다. – Adriaan
답변 해 주셔서 감사합니다. 질문이 편집되어 이제는 더 명확 해지기를 바랍니다. –