0
我有一个矩阵B 1631x5。 Download matfile在Matlab中查找重复值的索引并替换它们的索引
第2列和第3列分别代表X和Y坐标。 (i + j,2)== B(i + j,2)& B(i + k,3)== B(i + j,3)。请注意,可能有多个重复项。
下面是识别重复的脚本:
%% 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);
当执行代码,我们得到2矩阵:duplicate_ind(1x149)和DUPLICATE_VALUE(149x2)。
让我们考虑duplicate_ind的第4个值为例:
>> 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
现在我可以找到原始和重复:
find(B(:,2)==duplicate_value(1,1))
ans =
1
61
>> find(B(:,2)==duplicate_value(2,1))
ans =
57
77
在这种情况下,原始值的索引是1,并且副本的索引te是61.在其他情况下:原件: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
...
这个问题定义“不清楚你在问什么”。您可能想要重新修改它,因为此刻它非常令人困惑 –
欢迎使用堆栈溢出!目前这个问题相当模糊。请[编辑]这个问题来澄清你的意思。至少包括输入,因为Stack Overflow不是代码编写服务,所以你的代码放在[mcve]中。最后,你可能有兴趣阅读[问]这里。 – Adriaan
谢谢你的回答。这个问题是编辑的,我希望现在更清楚。 –