Как удалить пересечение множеств A и B от A без сортировки в Matlab?
-
28-09-2019 - |
Вопрос
Две матрицы, а и б:
A = [1 2 3
9 7 5
4 9 4
1 4 7]
B = [1 2 3
1 4 7]
Все строки MATRIX B являются членами Matrix A. Я хочу удалить общие строки A и B от A без сортировки.
Я попробовал SetDiff (), но это сортирует выход.
Для моей конкретной задачи (атомные координаты в белковых структурах) важны, поддерживая упорядоченную целостность рядов.
Решение
Использовать Симменебер:
%# find rows in A that are also in B
commonRows = ismember(A,B,'rows');
%# remove those rows
A(commonRows,:) = [];
Другие советы
Мне пришлось создавать различие между двумя массивами без сортировки данных. Я нашел этот отличный вариант в документах MatLab. Функция SetDiff
Вот определение функции [C,ia] = setdiff(___,setOrder)
Если вы не хотите, чтобы выводимые данные отсортированы, используйте «стабильный» в противном случае «сортируют» или без параметра.
Здесь был мой выбор.
yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
yDataBefore = ScopeDataY;
Не связан с StackOverflow