Как я могу извлечь значения из двух матриц на основе значений в одной из них? - PullRequest
1 голос
/ 08 февраля 2010

Мне было интересно, каковы лучшие методы для следующих действий:

У меня есть две матрицы: a1 (500 на 40) и a2 (1 на 500). Для a1, который является логическим, я хочу отделить массивы в зависимости от значений в определенном столбце (то есть true или false). Мне также необходимо отделить соответствующую запись в a2.

Я могу сделать это с помощью пары циклов или, возможно, даже путем объединения a1 и a2, выполнения логического теста и последующего их разделения, но мне было интересно, существует ли обычно используемый метод для чего-то подобного

Ответы [ 2 ]

4 голосов
/ 08 февраля 2010

Это предположение, но похоже, что для истинных записей в каждом столбце в a1 вы хотите извлечь соответствующие значения в a2. Поскольку вы сказали, что a1 является логическим (в MATLAB типом логический ), вы можете использовать логический индекс следующим образом:

vals1 = a2(a1(:,1));  %# Use column 1 of a1 as an index into a2
vals5 = a2(a1(:,5));  %# Use column 5 of a1 as an index into a2
...

Вот пример:

>> a1 = logical(randi([0 1],10,4))  %# Make a random logical matrix

a1 =

     0     0     1     1
     0     1     0     0
     1     1     1     1
     1     0     1     0
     0     0     1     1
     0     0     1     0
     0     1     1     0
     1     0     0     0
     1     1     0     1
     1     0     0     0

>> a2 = 1:10;
>> a2(a1(:,1))  %# Get the values in a2 corresponding
                %#    to the ones in column 1 of a1

ans =

     3     4     8     9    10

>> a2(a1(:,2))  %# Get the values in a2 corresponding
                %#    to the ones in column 2 of a1

ans =

     2     3     7     9
0 голосов
/ 08 февраля 2010
newval=a1(:,5); %equals to the 5th column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...