0

我有两个列向量,每个列向量 size <nx1>。该config向量721,722,723 and 724仅包含数字length,而 size 的向量<nx1>仅包含数字。我需要构建矩阵 Z,它的大小<3x3n>note:matrices a,b,c and d are each <3x3> matrices.在这里很难用文字表达规则,让我先举个例子:

length=[1 2 3],config=[721 722 723],a=eye(3),b=ones(3),c=magic(3);

z=[ 1     0     0     2     2     2    24     3    18
    0     1     0     2     2     2     9    15    21
    0     0     1     2     2     2    12    27     6]

也就是说,如果 config(i) 为 722 且 length(i) 为 2,则将 2*matrix_a 附加到 z 矩阵,依此类推。

我做了以下事情:

     z=[0 0 0;0 0 0;0 0 0];
    for i=1:3
    [~,col]=size(z);
      if config(i)==721
       z(:,col+[1:3])=length(i)*a
      end
      if config(i)==722
       z(:,col+[1:3])=length(i)*b
      end
      if config(i)==723
       z(:,col+[1:3])=length(i)*c
      end
    end
    z=z(:,4:end)

但是没有更好的无环矢量化方法吗?

4

1 回答 1

1

我不确定您是否仍然需要此信息,但我找到了解决方案:

config = [722 722 723 723 721];
lenght=[3 4 5 6 7];
a=eye(3);b=ones(3);c=magic(3);
d1 = kron( ~rem(config, 721).*lenght, a);
d2 = kron( ~rem(config, 722).*lenght, b);
d3 = kron( ~rem(config, 723).*lenght, c);
result = d1 + d2 + d3;

我的数据的结果:

a =

     1     0     0
     0     1     0
     0     0     1

b =

     1     1     1
     1     1     1
     1     1     1

c =

     8     1     6
     3     5     7
     4     9     2

result =

     3     3     3     4     4     4    40     5    30    48     6    36     7     0     0
     3     3     3     4     4     4    15    25    35    18    30    42     0     7     0
     3     3     3     4     4     4    20    45    10    24    54    12     0     0     7
于 2015-10-28T11:33:48.330 回答