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)
我希望这很清楚.
谢谢!
你可以用一些来做到这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)
我希望这是清楚的