Поиск значений, которых нет в массиве в matlab/octave

У меня есть два массива в matlab/octave a1 рассчитывается и a2 дается. Как я могу создать третий массив a 3, который сравнивает a1 с a2 и показывает значения, отсутствующие в a1?

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 только в целые числа.

Спасибо

2 ответа

Решение

setdiff возвращает элементы одного массива, которых нет в другом. Это будет работать со значениями с плавающей точкой, но требует равенства.

a3 = setdiff(a2, a1)
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 (или подходящее очень маленькое значение, учитывая точность ваших входных чисел). Для получения дополнительной информации см. Здесь

Другие вопросы по тегам