2016-11-01 2 views
-1

У меня есть клетка-матрица, как показано ниже,Reshape с определенным именем в Matlab

  • первый столбец: A, B, C
  • второй столбец: A, B, D
  • третий столбец: 1, 1, 1

Это означает, что а и а имеет 1 единицу, в и в имеет 1 единицу и с и D имеет один блок

Как можно легко создать п матрица (мат) в matlab?

 [Name,A,B,C,D 
     A,1,NA,NA,NA 
mat = B,NA,1,NA,NA 
     C,NA,NA,NA,NA 
     D,NA,NA,NA,1] 

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

A, B, C, D здесь символы, если матрица не может содержать как числовые, так и символы, я могу удалить первый столбец и первую строку в мат. Также на самом деле первая матрица, содержащая связь A, B, C, D, представляет собой ячейку 3 * 3.

+0

Являются ли буквы 'A, B, C, D' или действительными значениями? Вы не можете смешивать числовые и строковые значения в стандартном массиве MATLAB. Вы также должны удалить тег [tag: resharper], поскольку этот вопрос не имеет ничего общего с Microsoft Visual Studio. – beaker

ответ

0

Желаемый выход может быть получен:

mycell = {... 
'A' , 'B' , 'C' 
'A' , 'B' , 'D' 
1 , 1 , 1}; 
[U, ~, IDX] = unique(mycell(1:2,:)); 
IDX = reshape(IDX,2,[]).'; 
mat = accumarray(IDX,[mycell{3,:}],[],[],NA); 

так U это имена строк/столбцов

IDX показывает индексы строк и столбцов mat, которые содержат не NA значения

accumarray является функция, которая может преобразовывать индексы и значения в желаемую матрицу

Теперь вы можете получить доступ элементы mat числовыми индексами, т.е. mat(1,3), которые представляют отношения A и C

Если вы хотите работать с символьными индексами вместо числовых те, которые вы можете сделать это:

index=cell2struct(num2cell(1:numel(U)),U,2); 
mat(index.A, index.C) 

index это структура, которая отображает символы в числа. Также вы можете использовать index следующим образом:

mat(index.('A'), index.('C')) 
Смежные вопросы