我有一個相對較大的數據集,我正在通過MatLab查找缺少的數字。Matlab - 查找列表中缺失的數字
例如,我有可能看起來像數字列表:
1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 10, 10.....
你可以看到8在這裏失蹤。該列表是在成千上萬,也可能只是一對夫婦失蹤的數字。我怎樣才能找出哪些丟失?我的搜索只是有用的結果,沒有隨機重複的數字。似乎很簡單,但我無法弄清楚。
感謝您的幫助!
我有一個相對較大的數據集,我正在通過MatLab查找缺少的數字。Matlab - 查找列表中缺失的數字
例如,我有可能看起來像數字列表:
1, 1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7, 7, 7, 9, 10, 10.....
你可以看到8在這裏失蹤。該列表是在成千上萬,也可能只是一對夫婦失蹤的數字。我怎樣才能找出哪些丟失?我的搜索只是有用的結果,沒有隨機重複的數字。似乎很簡單,但我無法弄清楚。
感謝您的幫助!
你可以做這樣的事情:
% 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
這將打印出缺少的元素的值。
或者更簡單的,你可以只使用ismember()函數來構造 在略低於單線差集。
% 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);
然後,以確定哪些可以在「數據」的「設置」元素:
ismember(set, data)
輸出然後示出了數據丟失在「設定」位置:
ans =
1 1 1 1 1 1 1 0 1 1
使用unique
,像這樣:
B=unique(A); % A is your data
C=setdiff(1:max(A),B)
和C
是你想要的缺失數字。
編輯(afetr看到claj的答案):
如果你的數據從另一個值開始(而不是 「1」),第二行應該是:
C=setdiff(min(A):max(A),B)
EDIT2:(根據Eitan的評論)
C=setdiff(min(A):max(A),A);
這條線代替原來的答案的兩行。
我認爲你可以管理沒有獨特的',*即*:'setdiff(1:max(A),A)' –
@EitanT是的,我也這麼認爲......沒有想到它。 – Adiel
在數組中創建一個unique值列表。
找到這個唯一集合中的最小和最大數字(這些數字應該與數組中的數字相同,但更快找到)。
創建從最小到最大的範圍,如[min:max]
。
製作一個set difference的唯一陣列和範圍集。
這給你在快速的方式缺少數字。
使用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
end
謝謝,我用這個的成員,這是足以讓我需要的東西。非常感激!!並感謝其他人的其他變化,我可以嘗試添加到我的代碼。 – User
@用戶,好吧,我添加了一個更簡單的版本作爲第二個選項,以防有用。 –