gpt4 book ai didi

matlab - 三重加权总和

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:47 25 4
gpt4 key购买 nike

我试图对某个加权和进行矢量化,但不知道该怎么做。我在下面创建了一个简单的最小工作示例。我想解决方案涉及 bsxfun 或 reshape 和 kronecker 产品,但我仍然无法让它工作。

rng(1);
N = 200;
T1 = 5;
T2 = 7;
T3 = 10;


A = rand(N,T1,T2,T3);
w1 = rand(T1,1);
w2 = rand(T2,1);
w3 = rand(T3,1);

B = zeros(N,1);

for i = 1:N
for j1=1:T1
for j2=1:T2
for j3=1:T3
B(i) = B(i) + w1(j1) * w2(j2) * w3(j3) * A(i,j1,j2,j3);
end
end
end
end

A = B;

对于二维情况有一个聪明的答案here .

最佳答案

您可以使用额外的乘法来修改来自上一个答案的 w1 * w2' 网格,然后再乘以 w3。然后,您可以再次使用矩阵乘法与 A 的“扁平化”版本相乘。

W = reshape(w1 * w2.', [], 1) * w3.';
B = reshape(A, size(A, 1), []) * W(:);

您可以将权重的创建包装到它自己的函数中,并使其可推广到 N 权重。由于这使用递归,N 被限制为您当前的递归限制(默认为 500)。

function W = createWeights(W, varargin)
if numel(varargin) > 0
W = createWeights(W(:) * varargin{1}(:).', varargin{2:end});
end
end

并将其用于:

W = createWeights(w1, w2, w3);
B = reshape(A, size(A, 1), []) * W(:);

更新

使用@CKT 关于使用kron 的部分非常好的建议,我们可以稍微修改createWeights

function W = createWeights(W, varargin)
if numel(varargin) > 0
W = createWeights(kron(varargin{1}, W), varargin{2:end});
end
end

关于matlab - 三重加权总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39109263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com