0

我有矩阵

A = [ 5 6 7;
      7 5 6 ]

B = [ 1 2 3;
      3 1 2 ]

C = [ 1 0 2;
      0 2 1 ]

Start time A = [ 2 3 7;
                 1 6 8 ]

Start time C = [ 1 0 5;
                 0 4 7 ]

问题:我想使用矩阵 B 重复矩阵 A。我还有矩阵开始时间 A,它是开始的列,我们必须在其中放置矩阵 A 的每个值。然后我必须输入值“0”矩阵 C 的每个值(值“0”由矩阵 C 重复)在列号中,即矩阵“开始时间 C”的值,并且在放置每个矩阵 A 的值之前。

所以我必须在矩阵下面有这样的输出:

Result = [ 0 5 6 6 0 0 7 7 7;
           7 7 7 0 0 5 0 6 6 ]

谢谢你们的帮助

4

1 回答 1

2

一种可能的解决方案如下。请注意,我自由地为您的变量分配有意义的名称,因为AStart Time A(甚至不是有效的 Matlab 标识符)之类的名称很容易混淆。您还可以看到您的矩阵 CStart Time C是多余的,因为所有信息都已经编码在ABStart 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

按照要求。

于 2012-07-20T06:41:31.467 回答