考えられる解決策の 1 つは、次のとおりです。A
とStart Time A
(有効な Matlab 識別子でさえありません)などの名前は非常に混乱しやすいため、変数に意味のある名前を自由に割り当てたことに注意してください。また、すべての情報が 、 、
およびで既にエンコードされているため、行列C
およびが冗長であることがわかります
。Start Time C
A
B
Start Time A
% The values to put in the result matrix.
value = [5 6 7;
7 5 6];
% Column index where each sequence starts in the result matrix.
start = [2 3 7;
1 6 8];
% The length of each sequence, i.e. how often to put the value into the result.
count = [1 2 3;
3 1 2];
% Determine the longest row. Note: At this place you could also check, if all
% rows are of the same length. The current implementation pads shorter rows with
% zeros.
max_row_length = max(start(:, end) + count(:, end) - 1);
% Allocate an output matrix filled with zeros. This avoids inserting sequences
% of zeros afterwards.
result = zeros(size(start, 1), max_row_length);
% Finally fill the matrix using a double loop.
for row = 1 : size(start, 1)
for column = 1 : size(start, 2)
s = start(row, column);
c = count(row, column);
v = value(row, column);
result(row, s : s + c - 1) = v;
end
end
result
は_
result =
0 5 6 6 0 0 7 7 7
7 7 7 0 0 5 0 6 6
要求どおり。