3d列矩阵矢量乘法

use*_*302 5 matlab multiplication

我有一个3D(或一般的n维)矩阵A,其尺寸

size(A) = [d1 d2 d3 ... dn]. 
Run Code Online (Sandbox Code Playgroud)

现在我想v在其中一个维度上使用列向量进行向量乘法(就像我在2维中所做的那样,我得到一个向量返回 - 例如for d1 = 2,d3 = 4and size(v) = d2),这样

(A*d)_i = sum(a_ij*v_j). 
Run Code Online (Sandbox Code Playgroud)

因此,我想减少一个维度.

是否有一个Matlab函数(除了循环)返回一个d3维列向量v

(A*v)_ij = sum(A_ijk*v_k). 
Run Code Online (Sandbox Code Playgroud)

我希望这很清楚.

谢谢!

Oli*_*Oli 3

你可以用一些来做到这reshape一点:

A=rand(2,3,4);
v=rand(1,4);
reshape(reshape(A,[size(A,1)*size(A,2),size(A,3)])*v,[size(A,1) size(A,2)])
Run Code Online (Sandbox Code Playgroud)

基本上,您将 A 重塑为二维矩阵 A2((ij),(k))=A((i),(j),(k)):

A2=reshape(A,[size(A,1)*size(A,2),size(A,3)])
Run Code Online (Sandbox Code Playgroud)

然后你进行通常的乘法:

对于所有 (ij) B2((ij))=sum_k A2((ij),(k))*v((k)):

B2=A2*v
Run Code Online (Sandbox Code Playgroud)

你重塑回来:

B((i),(j))=B((ij))

B=reshape(B2,[size(A,1) size(A,2)])
Run Code Online (Sandbox Code Playgroud)

我希望这是清楚的