Если я правильно понял проблему, ее можно решить с помощью индексирования матрицы .Обратите внимание на следующее:
time = [2 1 7; 3 4 6; 4 6 1]; %# row indices
c = repmat(1:size(time,2),size(time,1),1); %# column indices
timeline = zeros(max(time(:)),size(time,2)); %# prepare result matrix
idx = sub2ind(size(timeline), time(:),c(:)); %# convert to linear indices
timeline(idx) = time; %# place the number in the matrix
Результат:
>> time
time =
2 1 7
3 4 6
4 6 1
>> timeline
timeline =
0 1 1
2 0 0
3 0 0
4 4 0
0 0 0
0 6 6
0 0 7
РЕДАКТИРОВАТЬ
Если time
содержит ноль элементов, эти значения необходимо пропустить.Пример:
time = [2 1 7; 3 0 6; 0 0 1];
c = repmat(1:size(time,2),size(time,1),1);
ind = ( time(:)~=0 ); %# non-zero entries
timeline = zeros(max(time(:)),size(time,2));
idx = sub2ind(size(timeline), time(ind),c(ind)); %# skip zero indices
timeline(idx) = time(ind); %# skip zero indices