2011-10-09 47 views
1

我有兩個數組在matlab/octave a1中計算並給出a2。我如何創建第三個數組 a3比較a1和a2並顯示a1中缺少的值?查找不在matlab/octave中的數組中的值

a1=[1,4,5,8,13] 
a2=[1,2,3,4,5,6,7,8,9,10,11,12,13] 
a3=[3,6,7,9,10,11,12] 

還可以在此工作浮點數說,如果a1=[1,4,5,8.6,13]或我將不得不轉換A1僅整數。

感謝

+0

始終比較浮點數時要小心:爲什麼24.0000不等於在MATLAB 24.0000?(http://stackoverflow.com/questions/686439/why-is-24-0000-not-等於24-0000-in-matlab),[如何比較MATLAB中兩個數組的所有元素?](http://stackoverflow.com/questions/2202641/how-do-i-compare-all-兩個數組在matlab中的元素) – Amro

回答

4

setdiff返回不在另一個陣列中的元素。這將適用於浮點值,但需要相等。

a3 = setdiff(a2, a1) 
+0

我誤解了問題陳述,所以OP可以使用'intersect'來忽略我以前的解決方案。這是正確的解決方案。 –

1
function missing = comparray(a1, a2) 
% array of numbers that are missing from input 
missing = [] 
% for each element in a2, check if it's in a1 
for ii=1:1:length(a2) 
    num = a2(ii); 
    deltas = abs(a1 - num); 
    if min(deltas) ~= 0 
     missing = [missing, num]; 
    end 
end 

浮點數字可能會非常棘手。爲了讓上面的代碼與他們一起工作,請檢查min(deltas) > 0.001(或給定輸入數字的精確度,一個合適的非常小的值)。有關更多信息,請參見here