我需要收集样本,这些样本是结构 data
中的矢量对 X
, Y
,字段为 X
和 Y
. 我需要运行许多模拟,最后我的结构看起来像是 data(i).X
, data(i).Y
,其中有第i个模拟 . 我需要一个结构,因为并非所有的模拟都具有相同的长度 .
我可以轻松地使用循环并一次运行一个模拟,但我想通过并行运行多个模拟来提高速度 .
我首先尝试初始化数据结构
data = struct( ...
'X', nan(dim_x, maxsteps), ...
'Y', nan(dim_y, maxsteps), ...
);
data = repmat(data, maxsimul, 1);
但我不知道如何在每个时间步更新它 . 我想做点什么
[data(ongoing).s(:,step)] = deal(squeeze(num2cell(x_samples,[1,maxsimul])));
[data(~ongoing).s(:,step)] = deal([]);
其中 ongoing
是一个布尔向量,用于了解哪些模拟仍在运行 . 但当然它不起作用 . 有可能做我想要的吗?
或者,我可以使用用 NaN
初始化的3d矩阵,并在每个时间步填充它们
X = nan(dim_x, maxsteps, maxsimul);
Y = nan(dim_y, maxsteps, maxsimul);
X(:,step,ongoing) = x_sample;
Y(:,step,ongoing) = y_sample;
完成所有模拟后,我将矩阵转换为
data = struct( ...
'X', squeeze(num2cell(X,[1 2])), ...
'X', squeeze(num2cell(X,[1 2])), ...
);
但是,我仍然需要获得如上所述的最终结构,我不知道如何过滤 NaN
.
例
x1 = [1 1 1 nan nan; 1 2 1 nan nan];
x2 = [4 nan nan nan nan; 1 nan nan nan nan];
X = zeros(2,5,2);
X(:,:,1) = x1;
X(:,:,2) = x2;
y1 = [12 41 1 nan nan];
y2 = [11 nan nan nan nan];
Y = zeros(1,5,2);
Y(:,:,1) = y1;
Y(:,:,2) = y2;
我需要
data(1).X = [1 1 1; 1 2 1];
data(2).X = [4; 1];
data(1).Y = [12 41 1];
data(2).Y = [11];
想要完成我需要的任何想法吗?可以使用上述任何方法,即通过逐步创建结构,或通过转换3d矩阵 .