2014-11-18 2 views
0

Таким образом у меня есть матрица А, возьмут в качестве примераСоздание новой матрицы из одной колонки, порядка двух других столбцов

 4 6 3.5 
     3 6 -1 
A = 5 2 0.7 
     4 3 1.2 

Теперь я хочу использовать Matlab сделать матрицу B из последнего столбца от A в очень специфическом ключе. Строки B должны быть упорядочены по первому столбцу A (в порядке возрастания), а столбцы B должны быть упорядочены (по возрастанию) вторым столбцом A. Это может дать пустые элементы в B, которым должно быть назначено NaN. Применительно к приведенном выше примере это дает

 NaN NaN -1 
B = NaN 1.2 3.5 
     0.7 NaN NaN 

Обратите внимание, что число строк и столбцов в B зависит от количества уникальных элементов в первом и втором столбце оператора А соответственно.

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

ответ

1

Вы можете использовать этот метод

[~,J1,K1] = unique(A(:,1)); 
[~,J2,K2] = unique(A(:,2)); 
sz = [numel(J1) numel(J2)]; 
B = nan(sz); 
B(sub2ind(sz, K1, K2)) = A(:,3); 

первое использование unique собрать уникальные предметы и их индексы в исходной колонке. Размер B определяется количеством уникальных элементов в первом и втором столбцах A. Теперь используйте линейную индексацию (полученную с использованием sub2ind), чтобы поместить значения в третий столбец в нужном месте.

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