我有一个关于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
答案 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);