Matlab 在一个结构中并行存储不同长度的数据样本

Matlab 在一个结构中并行存储不同长度的数据样本,matlab,structure,reshape,cell-array,Matlab,Structure,Reshape,Cell Array,我需要收集样本,这些样本是结构数据中的向量对X,Y,带有字段X和Y。我需要运行许多模拟,最终我的结构看起来像是第I次模拟的data(I).X,data(I).Y。我需要一个结构,因为不是所有的模拟都有相同的长度 我可以很容易地使用一个循环,一次运行一个模拟,但是我想通过并行运行多个模拟来提高速度 我尝试先初始化数据结构 data = struct( ... 'X', nan(dim_x, maxsteps), ... 'Y', nan(dim_y, maxsteps), ...

我需要收集样本,这些样本是结构
数据
中的向量对
X
Y
,带有字段
X
Y
。我需要运行许多模拟,最终我的结构看起来像是第I次模拟的
data(I).X
data(I).Y
。我需要一个结构,因为不是所有的模拟都有相同的长度

我可以很容易地使用一个循环,一次运行一个模拟,但是我想通过并行运行多个模拟来提高速度

我尝试先初始化数据结构

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([]);
其中,
持续
是一个布尔向量,用于知道哪些模拟仍在运行。 但这当然行不通。有可能做我想做的吗

或者,我可以使用用
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矩阵。

将顺序循环更改为
parfor
循环,这样就行了。只需确保您预定义了所有存储容器。@Adriaan我已经使用了
parfor
,但是如果我按照问题中的描述进行并行化,我可以快10倍(已经尝试过了,但我无法使用数据结构,因为它不是我想要的格式)。