MATLAB:形成一个矩阵数组,并对每个矩阵"元素"进行操作。

时间:2016-08-27 21:51:40

标签: matlab optimization vectorization

我有一个矩阵m数组,这样

  m1 = [1 2;3 4];
  m2 = [2 7; 8 9];
  m3 = [9 7; 8 91];
  m = [m1 m2 m3]


m =
       1     2     2     7     9     7
       3     4     8     9     8    91

我也有一个载体

v = [1 2 3];

这样我希望v和m之间的操作导致h

h = [1*m1 2*m2 3*m3] = [h1 h2 h3];

我想我必须在h的三维数组中执行此操作,这是一个3d数组。或者也许有更好的方法。

设A是一个简单的2乘2矩阵rand(2,2)。 从h我想要提取h1 h2h3(或者最好不要进行任何提取)并对A执行操作,以便

1

  h1*A*h1'
  h2*A*h2'
  h3*A*h3'

2

h1*h1', h2*h2', h3*h3'. 

为什么我想在数组中这样做是因为我有很多矩阵mi所以我想通过矢量化来避免循环。

1 个答案:

答案 0 :(得分:0)

从我可以理解的问题来看,我认为元素乘法将是更好的选择。你只需要使用适当的连接和重复矩阵。

  m1 = [1 2; 3 4];
  m2 = [2 7; 8 9];
  m3 = [9 7; 8 91];

  % Concatenate to create 3D matrix
  m = cat(3,m1,m2,m3);

  v = [1 2 3];

  % Create similar 3D matrix 
  v1 = cat(3,ones(size(m1))*v(1),ones(size(m2))*v(2),ones(size(m3))*v(3));

  % Simple element wise multiplication
  h = m.*v1;

  % Creating a repeated 3D matrix A, repetation is along third dimension
  A = repmat(rand(2,2),[1 1 3]);

  % Outputs
  op_1 = h.*A.*permute(h,[2 1 3]);
  op_2 = h.*permute(h,[2 1 3]);