我有一个相对较大的数据集,我正在通过MatLab查找丢失的数字。
例如,我有一个数字列表,看起来可能如下:
1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 10, 10.....
你可以看到这里丢失了8号。名单上有数千人,可能只有几个数字缺失。我怎么才能找出哪一个不见了?我的搜索只显示了有用的结果,没有随机重复数字。看起来很简单但我想不出来。
谢谢你帮忙!
发布于 2014-01-11 20:13:48
你可以这样做:
% Your data:
data = [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 10, 10];
for i = 1:data(end)
if (isempty(find(data==i)))
disp(['i = ',num2str(i)]);
end
end它将打印缺失元素的值。
或者更简单地说,您只需使用simpler ()函数在下面的一行中构造set差异。
% First enter your data and construct 'set':
data = [1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 10, 10];
set = data(1):data(end);然后确定“set”的哪些元素也在“data”中:
ismember(set, data)然后,输出显示数据丢失的“集合”中的位置:
ans =
1 1 1 1 1 1 1 0 1 1发布于 2014-01-11 20:15:00
使用unique,如下所示:
B=unique(A); % A is your data
C=setdiff(1:max(A),B)C是你想要的缺少的数字。
编辑(在看到claj的答案后):
如果您的数据从另一个值(而不是"1")开始,那么第二行应该是:
C=setdiff(min(A):max(A),B)EDIT2: (根据Eitan的评论)
C=setdiff(min(A):max(A),A);这一行替换了原来答案中的两行。
发布于 2014-01-11 20:23:42
使用ismember()函数检查数字是否为数据数组的成员
% set your data array
maximum = max(data);
minimum = min(data);
for i= minimum:maximum
if ~ismember(i,data);
disp([num2str(i) , ' is missed']);
end
endhttps://stackoverflow.com/questions/21067213
复制相似问题