Как удалить пересечение множеств A и B из A без сортировки в MATLAB? - PullRequest
6 голосов
/ 12 августа 2010

Две матрицы, A и B:

A = [1 2 3
     9 7 5
     4 9 4
     1 4 7]

B = [1 2 3
     1 4 7]

Все строки матрицы B являются членами матрицы A. Я хочу удалить общие строки A и B из A без сортировки.

Я пробовал setdiff (), но это сортирует вывод.

Для моей конкретной задачи (атомные координаты в структурах белка) важно поддерживать упорядоченную целостность строк.

Ответы [ 2 ]

10 голосов
/ 12 августа 2010

Использование ИЗМЕРИТ :

%# find rows in A that are also in B
commonRows = ismember(A,B,'rows');

%# remove those rows
A(commonRows,:) = [];
1 голос
/ 27 марта 2016

Мне пришлось создать diff между двумя массивами без сортировки данных.Я нашел этот замечательный вариант в документах Matlab. Функция Setdiff

Вот определение функции [C,ia] = setdiff(___,setOrder) Если вы не хотите, чтобы выходные данные сортировались, используйте 'stable', иначе 'sorted' или без параметра.

Вот мой вариант использования.

yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
yDataBefore = ScopeDataY;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...