存储多个时间步长的多个数据阵列的最快/最简单方法

时间:2013-07-20 20:08:03

标签: arrays matlab structure

我有数千个时间步长的粒子ID,x位置,y位置,x速度和y速度数据。我希望能够在多个时间步骤中使用find()。例如,找到x和y速度低于某个值的所有时间和粒子。

我开始使用一系列矩阵来执行此操作:

particles{t}(particleIndex,dataType)

所以particles{40}(:,2)将在步骤40给出我所有粒子的y位置 并且particles{50}(:,1)将在步骤50的时间返回所有粒子的x位置。

这似乎是处理我的数据的一种笨拙的方法。我意识到我可以使用结构数组particles(t).idparticles(t).xpos等。我仍然难以在时间步骤中使用find()并且无法找到任何指向的信息我在正确的方向。从我读过的内容看来,这也可能不是最好的选择。

我应该如何为我的目的存储这些数据?我是否可以跨时间步使用find()而无需迭代它们?

1 个答案:

答案 0 :(得分:0)

为什么不通过粒子ID索引?:

particles = struct;
particles(id).t    % length(t)-by-1
particles(id).x    % length(t)-by-1
particles(id).y    % length(t)-by-1
particles(id).xdot % length(t)-by-1
particles(id).ydot % length(t)-by-1

然后particles(id).x是一个向量,其中每个元素对应particles(id).t中的元素。 particles(1).x(1)将是x 1的第一个id值。但是,使用id分解问题的方法是,您将无法搜索粒子。我真的只是使用数组(或包含所有粒子数组的结构):

particles = struct;
particles.ids  % 1-by-length(ids)
particles.t    % length(t)-by-1 or length(t)-by-length(ids)
particles.x    % length(t)-by-length(ids)
particles.y    % length(t)-by-length(ids)
particles.xdot % length(t)-by-length(ids)
particles.ydot % length(t)-by-length(ids)

这里particles.ids可以是行(或其他数组的列)的索引。当然,在这种情况下,我们所有的粒子轨迹都需要具有相同的长度(时间步数)。这类似于Matlab的ODE函数的结构输出形式,例如ode45