首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab --在列表中查找丢失的数字

Matlab --在列表中查找丢失的数字
EN

Stack Overflow用户
提问于 2014-01-11 20:03:59
回答 5查看 3.2K关注 0票数 1

我有一个相对较大的数据集,我正在通过MatLab查找丢失的数字。

例如,我有一个数字列表,看起来可能如下:

1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 10, 10.....

你可以看到这里丢失了8号。名单上有数千人,可能只有几个数字缺失。我怎么才能找出哪一个不见了?我的搜索只显示了有用的结果,没有随机重复数字。看起来很简单但我想不出来。

谢谢你帮忙!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-11 20:13:48

你可以这样做:

代码语言:javascript
运行
复制
% 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差异。

代码语言:javascript
运行
复制
% 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”中:

代码语言:javascript
运行
复制
ismember(set, data)

然后,输出显示数据丢失的“集合”中的位置:

代码语言:javascript
运行
复制
ans =
     1     1     1     1     1     1     1     0     1     1
票数 2
EN

Stack Overflow用户

发布于 2014-01-11 20:15:00

使用unique,如下所示:

代码语言:javascript
运行
复制
B=unique(A);     % A is your data
C=setdiff(1:max(A),B)

C是你想要的缺少的数字。

编辑(在看到claj的答案后):

如果您的数据从另一个值(而不是"1")开始,那么第二行应该是:

代码语言:javascript
运行
复制
C=setdiff(min(A):max(A),B)

EDIT2: (根据Eitan的评论)

代码语言:javascript
运行
复制
C=setdiff(min(A):max(A),A);

这一行替换了原来答案中的两行。

票数 3
EN

Stack Overflow用户

发布于 2014-01-11 20:23:42

使用ismember()函数检查数字是否为数据数组的成员

代码语言:javascript
运行
复制
% set your data array
maximum = max(data);
minimum = min(data);

for i= minimum:maximum

    if ~ismember(i,data);
        disp([num2str(i) , ' is missed']);
    end

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

https://stackoverflow.com/questions/21067213

复制
相关文章

相似问题

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