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 循环

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

那么它不是唯一的。但是,我不想写类似的东西

 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+?)

那将更加复杂。

非常感谢您提前提供的帮助。

4

3 回答 3

6

尝试这个:

unique(data,'rows')

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

于 2013-07-29T08:14:04.560 回答
0

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

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
于 2013-08-01T09:42:15.073 回答
0

这应该工作

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,:);
于 2013-07-29T08:19:51.143 回答