我需要收集样本,这些样本是结构 data 中的矢量对 XY ,字段为 XY . 我需要运行许多模拟,最后我的结构看起来像是 data(i).Xdata(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矩阵 .