matlab:删除重复值

标签 matlab vectorization duplicates

我对一般编程和 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/

相关文章:

r - 如何在 data.table 中编写累积计算

PHP 如何在复制字符串中的每个字符后将字符串变为 "unduplicate"(还原字符串)

javascript - Jquery - 对多个 id 使用一个函数以节省重复代码

java - 如何从java中的两个数组中删除重复的字符串?

matlab - 在 Matlab 中转发输入名称?

performance - MATLAB 中的矢量化循环

iphone - 无法使用 TCP/IP 连接 iPhone 和笔记本电脑

python - 如何向量化具有不同形状的 ndarray 作为参数的函数?

r - 如何读取 R 中的模拟输入?/或如何翻译现有的 Matlab 代码

c++ - 为什么 MATLAB 在创建随机数方面比 C++ 快?