Как удалить пересечение множеств A и B от A без сортировки в Matlab?

StackOverflow https://stackoverflow.com/questions/3467670

  •  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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top