我有格式
的矩阵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
答案 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'