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



我有一个关于 4 维对象乘以 1 维对象的问题。 实际上,我有一个大小为 (15,15,3,5( 的 4D 对象。 我想通过使用 5x1 向量将第 4 维相乘,将最后一个维度折叠为 1。然后我想使用 squeeze 来得到一个 (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 

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

% 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);

最新更新