将4D矩阵乘以向量,然后折叠1维

时间:2018-10-17 18:51:44

标签: matlab matrix matrix-multiplication

我有一个关于4维对象与1维对象相乘的问题。 实际上,我有一个大小为(15,15,3,5)的4D对象。 我想通过使用5x1向量将第4维乘以,将最后一个维折叠为1。然后我要使用挤压来获得(15,15,3)大小的对象,再将其乘以3x1向量,留下我15x15矩阵。

我可以循环执行此操作,但这非常昂贵。谁能给我建议如何无循环执行此操作?

现在循环:

expectationCalc = reshape(mValueFunction(age+1, :, :, :, :), nGridAssets, nGridHumanCapital, nNetInterestRate, nShockstoHumanCapital);
for i = 1:nGridAssets
    for j = 1:nGridHumanCapital
        expectation(i,j) = mTransitionNetInterestRate(nNetIntRate, :)*(squeeze(expectationCalc(i,j,:,:))*mTransitionShockHumanCapital(ShockHcapital, :)');
    end
end 

1 个答案:

答案 0 :(得分:0)

如果将4D矩阵重塑为2D矩阵,其中第二维是要通过点积缩小的维,而第一维包含所有其他维,则可以应用常规矩阵乘法。然后可以将结果调整为原始大小(减去一维):

% Input data
M = randn(15,15,3,5);
v1 = randn(5,1);
v2 = randn(3,1);

% 1st multiplication
sz = size(M);
M = reshape(M,[],sz(end));
M = M * v1;
sz(end) = [];       % We no longer have that last dimension
M = reshape(M,sz);

% 2nd multiplication
M = reshape(M,[],sz(end));
M = M * v2;
sz(end) = [];       % We no longer have that last dimension
M = reshape(M,sz);