我对一般编程和 MATLAB 还很陌生,我在从矩阵中删除值时遇到了一些问题。
我的矩阵 tmp2 的值是:
tmp2 = [... ...
0.6000 20.4000
0.7000 20.4000
0.8000 20.4000
0.9000 20.4000
1.0000 20.4000
1.0000 19.1000
1.1000 19.1000
1.2000 19.1000
1.3000 19.1000
1.4000 19.1000
... ...];
如何去除左栏有1.0而右栏的值不同的部分?我想用 19.1 保存该行。我搜索了解决方案,但发现一些解决方案使用 histc 函数删除了两行,而这不是我需要的。
谢谢
最佳答案
你可以使用 unique
来做到这一点:
>> [~,b] = unique(tmp2(:,1)); % indices to unique values in first column of tmp2
>> tmp2(b,:) % values at these rows
ans =
0.6000 20.4000
0.7000 20.4000
0.8000 20.4000
0.9000 20.4000
1.0000 19.1000
...
默认情况下,unique
保存它找到的last 唯一值,并且输出将被排序。这恰好是你想要/拥有的,所以你很幸运:)
如果这不是您想要/拥有的,您将不得不再修改一下。删除重复项保留顺序是这样的:
% mess up the order
A = randperm(size(tmp2,1));
tmp2 = tmp2(A,:)
% use third output of unique
[a,b,c] = unique(tmp2(:,1));
% unique values, order preserved
tmp2(b(c),:)
ans =
1.1000 19.1000
1.2000 19.1000
1.0000 20.4000
0.7000 20.4000
1.0000 20.4000
1.4000 19.1000
0.6000 20.4000
0.9000 20.4000
1.3000 19.1000
0.8000 20.4000
...
它仍然保留找到的最后 条目。如果要保留找到的第一个 条目,请使用
% unique values, order preserved, keep first occurrence
[a,b,c] = unique(tmp2(:,1), 'first');
关于matlab:删除重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16793979/