以下をベクトル化する方法はありますか:
for i = 1:6
te = k(:,:,:,i).*(c(i));
end
私は、独立した (3D 行列 * スカラー) 操作に分割することにより、4D 行列 k をベクトル c で乗算しようとしています。この関数ファイルの while ループ内には、回避できない他の 2 つの for ループが既にあり、ループを回避するために最善を尽くしています。
これに関する洞察は大歓迎です!
-SC
以下をベクトル化する方法はありますか:
for i = 1:6
te = k(:,:,:,i).*(c(i));
end
私は、独立した (3D 行列 * スカラー) 操作に分割することにより、4D 行列 k をベクトル c で乗算しようとしています。この関数ファイルの while ループ内には、回避できない他の 2 つの for ループが既にあり、ループを回避するために最善を尽くしています。
これに関する洞察は大歓迎です!
-SC
MTIMESXを使用してこれを行うことができます。MTIMESX は、Matlab のファイル交換にある James Tursa による多次元サポートを備えた高速行列乗算ツールです。
次のように簡単です。
C = mtimesx(A,B)
計算を実行します C = A * B
何かが欠けていない限り、これは bsxfun の場合です。
te=bsxfun(@times, k, permute(c,[3 4 1 2])); % c is a row vector
または
te=bsxfun(@times, k, permute(c,[3 4 2 1])); % c is a column vector
これは、k の 4 次元が c と同じサイズであると仮定しています。そうでない場合は、サブマトリックス インデックスを使用できます。
te=bsxfun(@times, k(:,:,:,1:length(c)), permute(c,[3 4 2 1])); % c is a column vector