我想将Matlab循环生成的每个匿名函数存储在结构(而不是单元格)中,然后访问和评估每个存储的匿名函数另一个分开的循环我用单元格方法报告了一个非常简单的例子。我不知道在这种情况下使用结构的最有效方法是哪种。
gammatrue = 2;
deltatrue = -3;
T = 4;
n = 3;
BS = 10;
r = 5;
bsdensdraws = cell(1, BS);
bsdensdrawsev = zeros(T*n*r, BS);
for w = 1:BS
data = randn(T*n, n-1);
mutrue = gammatrue/deltatrue*data;
sigmatrue = repmat(1/(deltatrue^2)*eye(n-1), [1 1 T*n]);
draws = mvnrnd(repmat(mutrue, [r 1]), repmat(sigmatrue, [1 1 r])); %matrix (r*T*n)x(n-1))
bsdensdraws{w} = @(z) mvnpdf(draws,repmat(z(1)/z(2)*data, [r 1]), ...
repmat(repmat(1/(z(2)^2)*eye(n-1), [1 1 T*n]), [1 1 r]));
end
param = [2 3; 4 5; 6 7];
for w = 1:BS
for y = 1:size(param,1)
gamma = param(y,1);
delta = param(y,2);
bsdensdrawsev(:,w) = bsdensdraws{w}([gamma delta]); %vector (T*n*r)x1
end
end
答案 0 :(得分:0)
您需要通过名称访问结构的字段,您需要首先生成字段名称列表。因为你只有10个字段,我建议
fields = char(double('a'):double('a')+BS)'
生成包含字母a到k的数组。您通过
预先分配bsdensdraws
bsdensdraws = struct();
并通过
将句柄写入其中bsdensdraws.(fields(w)) = ...
您可以以相同的方式访问它。如果您需要更多迭代,那么您可能需要更复杂的方法来生成字段名称。