我有一组数据,如下所示:
数据=
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+?)那就更复杂了。
非常感谢您提前给予的帮助。
发布于 2013-07-29 16:14:05
试试这个:
unique(data,'rows')C= unique( A,' rows ')将A的每一行视为单个实体,并返回A的唯一行。矩阵C的行是按排序顺序排列的。“rows”选项不支持单元格数组。
发布于 2013-07-29 16:19:51
这应该是可行的
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-08-01 17:42:15
嘿,我刚刚知道怎么做:)谢谢大家的帮助:)
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);
endhttps://stackoverflow.com/questions/17918928
复制相似问题