内置功能bsxfun
是一个快速实用程序,应该能够提供帮助。它被设计为在每个元素的基础上为两个尺寸不匹配的输入执行 2 个输入功能。Singletons维度被扩展,非singleton维度需要匹配。(这听起来令人困惑,但一旦发现它在很多方面都很有用。)
据我了解您的问题,您可以调整每个向量的维度形状以定义它应该定义的维度。然后使用嵌套bsxfun
调用来执行乘法。
示例代码如下:
%Some inputs, N-by-1 vectors
x = [1; 3; 9];
y = [1; 2; 4];
z = [1; 5];
%The computation you describe, using nested BSXFUN calls
bsxfun(@times, bsxfun(@times, ... %Nested BSX fun calls, 1 per dimension
x, ... % First argument, in dimension 1
permute(y,2:-1:1) ) , ... % Second argument, permuited to dimension 2
permute(z,3:-1:1) ) % Third argument, permuted to dimension 3
%Result
% ans(:,:,1) =
% 1 2 4
% 3 6 12
% 9 18 36
% ans(:,:,2) =
% 5 10 20
% 15 30 60
% 45 90 180
要处理任意数量的维度,可以使用递归或循环构造对其进行扩展。循环看起来像这样:
allInputs = {[1; 3; 9], [1; 2; 4], [1; 5]};
accumulatedResult = allInputs {1};
for ix = 2:length(allInputs)
accumulatedResult = bsxfun(@times, ...
accumulatedResult, ...
permute(allInputs{ix},ix:-1:1));
end