首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matlab中查找不重复的唯一数据对

在matlab中查找不重复的唯一数据对
EN

Stack Overflow用户
提问于 2013-07-29 16:08:08
回答 3查看 4.1K关注 0票数 3

我有一组数据,如下所示:

数据=

4 35

4 36

4 37

4 39

4 50

6 24

6 35

6 36

6 39

6 50

6 78

10 24

10 35

10 36

10 39

..。

实际的矩阵是70000 X 2的顺序。我想要的是形成一个包含所有唯一数据对的矩阵,因此每个元素与前面的元素不同,如下所示

结果=

4 35

6 24

10 36

我正在考虑这样一种方法

步骤1.找出唯一列1的所有索引,在本例中为

索引=

1

6

12

步骤2.像这样做一个for循环

代码语言:javascript
复制
result = data(index);

for j = 1:length(index)

  if result(j,2) == result(j-1,2)

     result(j) = data(index+1)

  end

end

这里出现了一个问题,我有可能得到这样的结果

4 35

6 24

10 35

那么它就不是唯一的了。但是,我不想写像这样的东西

代码语言:javascript
复制
 if result(j,2) = result(j-1,2) ...
     or result(j,2) = result(j-2,2) ...
     or result(j,2) = result(j-3,2) ...
     or result(j,2) = result(j-4,2) ...
 result(j) = data(index+?)

那就更复杂了。

非常感谢您提前给予的帮助。

EN

回答 3

Stack Overflow用户

发布于 2013-07-29 16:14:05

试试这个:

代码语言:javascript
复制
unique(data,'rows')

C= unique( A,' rows ')将A的每一行视为单个实体,并返回A的唯一行。矩阵C的行是按排序顺序排列的。“rows”选项不支持单元格数组。

票数 6
EN

Stack Overflow用户

发布于 2013-07-29 16:19:51

这应该是可行的

代码语言:javascript
复制
I = true(size(data,1),1);
idx = [];
while any(I)
    idx(end+1) = find(I,1,'first');  %#ok
    I = I & all(~bsxfun(@eq, data, data(idx(end),:)),2);
end

result = data(idx,:);
票数 0
EN

Stack Overflow用户

发布于 2013-08-01 17:42:15

嘿,我刚刚知道怎么做:)谢谢大家的帮助:)

代码语言:javascript
复制
for j = 1:500 % random number, big enough to find out all my pairs
    k = 1;
    while any(bsxfun(@eq, store, data(k,2))|bsxfun(@eq, store, data(k,1)))
        k = k+1;
       if k > length(data)-1, break, end  

end

    pair(j,:) = data(k,:);
    store(2*j-1) = pair(j,1);
    store(2*j) = pair(j,2);
    fprintf('the loop we are at is %d \n',j);

end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17918928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档