2016-10-07 2 views
0

Предположим, что у меня есть матрица В, таких как:Нахождение обратной числовой ссылки в Matlab

b = 

    16  2  3 13 
    5 11 10  8 
    9  7  6 12 
    4 14 15  1 

и вектора а, который будет использоваться в качестве указателя б

a = 

    1  2  3 

с использованием в BB (а, :) мы имеем

16  2  3 13 
5 11 10  8 
9  7  6 12 

Я хотел бы знать, самый быстрый способ найти обратную ссылку, которая является ссылкой, что бы дать мне output:

4 14 15  1 

К сожалению, эти ссылки не могут быть сохранены как логические, так как я указываю на очень большие матрицы данных.

+2

Одно из решений: 'b (~ ismember (1: size (b, 2), a), :)' – obchardon

+1

Возможно, вы сможете повысить производительность по предложению @ obchardon, используя ['ismembc'] (http://undocumentedmatlab.com/blog/ismembc-undocumented-helper-function), но эти решения (и большинство других, о которых я могу думать) дадут вам полные логические векторы. Я немного волнуюсь, хотя, когда кто-то запрашивает самый быстрый способ доступа к матрицам, а затем выбирает целые строки, а не организует их данные, чтобы они выбирали столбцы. – beaker

+0

Я придерживаюсь решения члена семьи. –

ответ

1

Логическое значение использует только один байт, а числовой индекс использует 8 байтов.

Так индексы и обратная из них полностью использовать 8 * размер (б, 1)

Но логический индекс и обратный использовать только 2 * размер (б, 1)

Тогда эффективно использовать logical index!

Смежные вопросы