Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 三重For循环之和的矢量化_Matlab_Matrix_Vectorization - Fatal编程技术网

Matlab 三重For循环之和的矢量化

Matlab 三重For循环之和的矢量化,matlab,matrix,vectorization,Matlab,Matrix,Vectorization,目前,我正试图通过以下三重循环构建矩阵Alpha: Alpha = zeros(a_length, b_length); for a = 1:a_length for b = 1:b_length for c = 1:c_length Alpha(a,b) = Alpha(a,b) + Beta(c,a) * Gamma(b,c); end end end 有没有一种方法可以将两个向量传递给Beta和Gamma矩阵,这样我就可以在一行向

目前,我正试图通过以下三重循环构建矩阵Alpha:

Alpha = zeros(a_length, b_length);   
for a = 1:a_length
  for b = 1:b_length
      for c = 1:c_length
          Alpha(a,b) = Alpha(a,b) + Beta(c,a) * Gamma(b,c);
      end
  end
end

有没有一种方法可以将两个向量传递给Beta和Gamma矩阵,这样我就可以在一行向量化的优雅代码中构造整个Alpha?

你可以使用简单的
矩阵乘法来解救你-

Alpha = (Gamma*Beta).'
还是这样-

Alpha = Beta.'*Gamma.'
或者是有点复杂的基于bsxfun的方法-

Alpha = sum(bsxfun(@times,permute(Gamma,[3 1 2]),permute(Beta,[2 3 1])),3)
Alpha = squeeze(sum(bsxfun(@times,Gamma,permute(Beta,[3 1 2])),2)).'
如果您想避免前面的
bsxfun
方法中的一个
permute
-

Alpha = sum(bsxfun(@times,permute(Gamma,[3 1 2]),permute(Beta,[2 3 1])),3)
Alpha = squeeze(sum(bsxfun(@times,Gamma,permute(Beta,[3 1 2])),2)).'
还是这个-

Alpha = squeeze(sum(bsxfun(@times,Beta.',permute(Gamma,[3 2 1])),2))

你可以用简单的
矩阵乘法来解救你-

Alpha = (Gamma*Beta).'
还是这样-

Alpha = Beta.'*Gamma.'
或者是有点复杂的基于bsxfun的方法-

Alpha = sum(bsxfun(@times,permute(Gamma,[3 1 2]),permute(Beta,[2 3 1])),3)
Alpha = squeeze(sum(bsxfun(@times,Gamma,permute(Beta,[3 1 2])),2)).'
如果您想避免前面的
bsxfun
方法中的一个
permute
-

Alpha = sum(bsxfun(@times,permute(Gamma,[3 1 2]),permute(Beta,[2 3 1])),3)
Alpha = squeeze(sum(bsxfun(@times,Gamma,permute(Beta,[3 1 2])),2)).'
还是这个-

Alpha = squeeze(sum(bsxfun(@times,Beta.',permute(Gamma,[3 2 1])),2))

如何合并每次需要添加的Alpha(a,b)项?@jsc123基本上矩阵乘法结果的每个元素都对应于
Alpha(a,b)
。你测试过代码了吗?为什么在第二个版本中把Gamma放在引号里?@jsc123 in
Alpha=Beta.*Gamma.
我把
Beta
的转置和
Gamma
的转置相乘。所以这些引用实际上是转置。请在此阅读更多信息-如何合并每次需要添加的Alpha(a,b)项?@jsc123基本上矩阵乘法结果的每个元素都对应于
Alpha(a,b)
。你测试过代码了吗?为什么在第二个版本中把Gamma放在引号里?@jsc123 in
Alpha=Beta.*Gamma.
我把
Beta
的转置和
Gamma
的转置相乘。所以这些引用实际上是转置。在这里阅读更多关于它的信息-