在Matlab中用索引矩阵创建矩阵

时间:2015-10-28 15:07:13

标签: matlab

我有格式

的矩阵
A 2 x
A 3 y
A 4 z
B 1 a
B 12 b

我想重塑它,假设第二列是1-12的索引

A 0 x y z 0 0 0 0 0 0 0 0
B a 0 0 0 0 0 0 0 0 0 0 b

2 个答案:

答案 0 :(得分:2)

这个想法是:

  • 获取第一列中唯一值的数量,并获取第二列中的最大值,以了解结果的大小;

  • 为结果分配内存;

  • 使用唯一标识填充第一列;

  • 使用索引值填充行。

这是:

    %'Some matrix (that the OP should have provided...)'
    M0 = [
       1 2 4;
       1 3 6;
       3 4 2;
       2 1 1;
       2 12 10
    ];

    %'Allocate space for result'
    U  = unique(M0(:,1));
    L  = max(M0(:,2));
    M1 = zeros(numel(U), L+1); 

    %'Populate result'
    M1(:,1) = U(:);
    for k = 1:numel(U)
            IX = (M0(:,1)==U(k));
            M1(k,M0(IX,2)+1) = M0(IX,3);
    end;

这应该适用于第一列中的任意大M0和任意数量的唯一身份。

答案 1 :(得分:1)

这是一个简单而肮脏的解决方案。

M = {'A', '2', 'x'; 'A', '3', 'y'; 'A', '4', 'z'; 'B', '1', 'a'; 'B', '12', 'b'};

for l = 1:length(M)
    n = 1 + double(M{l, 1}) - double('A');
    m = str2double(M{l, 2});

    R{n, m} = M{l, 3};
end

[R{cellfun(@(x) isempty(x), R)}] = deal('0');

结果:

>> R = 
'0'    'x'    'y'    'z'    '0'    '0'    '0'    '0'    '0'    '0'    '0'    '0'
'a'    '0'    '0'    '0'    '0'    '0'    '0'    '0'    '0'    '0'    '0'    'b'