как сравнить с строкой в ​​Matlab - PullRequest
2 голосов
/ 15 марта 2011

У меня есть матрица, похожая на эту:

1468    1468

1468    1711

1468    1469

1711    1468

1711    1711

1711    1469

1469    1468

1469    1711

1469    1469

, и я хотел бы удалить запись (i, j), если запись (j, i) существует.Например, я хотел бы удалить 1711 1468, так как над ним появляется 1468 1711.

Как мне это сделать?

Ответы [ 2 ]

4 голосов
/ 15 марта 2011

Предполагая, что порядок удаления строк не имеет значения, вы можете комбинировать SORT и UNIQUE следующим образом:

m = [1468    1468
1468    1711
1468    1469
1711    1468
1711    1711
1711    1469
1469    1468
1469    1711
1469    1469]

[~,v]=unique(sort(m,2),'rows');

trimmedM = m(sort(v),:) %# keep the row ordering as in the original

trimmedM =
        1468        1468
        1711        1468
        1711        1711
        1469        1468
        1469        1711
        1469        1469

Обратите внимание, что unique сохранит последнюю из повторяющихся записей, что, по-видимому, соответствует вашим требованиям.

1 голос
/ 15 марта 2011

По природе проблемы я предполагаю, что порядок не имеет значения. Тогда вы можете просто сохранить меньшее число в первом столбце и искать дублирующиеся строки. В этом вопросе есть несколько предложений для этого. Эта строка будет выполнять такую ​​сортировку, чтобы ссылочные методы работали:

x = [min(x(:,1),x(:,2)),max(x(:,1),x(:,2))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...