MATLAB: Trouvez la paire de coordonnées unique dans la matrice et en fonction de la matrice de distance, conservez la matrice de distance minimale et remplacez l’autre paire de coordonnées par NaN

j’ai deux matrices d’entrée (P et R) et une matrice de distance (distance)
P=[1315.2,832.2
1317.2,808.8
1510.8,514.4
1354.7,743
1519.1,873
1382.7,736.6]
R=[1318,816
1318,816
1515,515
1346,740
1515,867
1346,740]
distance = [16,43
7.24
4.2
9.19
7.2
36]
Je veux découvrir des valeurs uniques de R et à partir des matrices de distance, quelle que soit la distance est moindre, conserver la valeur R selon la distance minimale entre deux paires de coordonnées et la remplacer par NaN
La sortie devrait ressembler à ceci:
P_new = [1315,2 832,2
1317.2,808.8
1510.8,514.4
1354.7,743
1519.1,873
1382.7,736.6]
R_new = [NaN, NaN
1318,816
1515,515
1346,740
1515,867
NaN, NaN]
distance_new = [NaN
7.24
4.2
9.19
7.2
NaN]
 
% P, R and distance are input matrices
P=[1315.2,832.2;1317.2,808.8;1510.8,514.4;1354.7,743;1519.1,873;1382.7,736.6]
R=[1318,816;1318,816;1515,515;1346,740;1515,867;1346,740]
distance= [16.43;7.24;4.2;9.19;7.2;36]
% P_new, R_new and distance_new are the required output matrices
P_new=[1315.2,832.2;1317.2,808.8;1510.8,514.4;1354.7,743;1519.1,873;1382.7,736.6]
R_new = [NaN,NaN;1318,816;1515,515;1346,740;1515,867;NaN,NaN]
distance_new = [NaN;7.24;4.2;9.19;7.2;NaN]
 

Meilleure réponse

  • une solution:
     

    [uv,~,idx] = unique(R,'rows');
    v = accumarray(idx,distance,[],@min);
    eliminate=~ismember([R distance],[uv v],'rows');
    P_new=P
    R_new=R;
    R_new(eliminate,:)=nan
    distance_new=distance;
    distance_new(eliminate)=nan