1

我有数千个时间步长的粒子 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()跨时间步使用而不迭代它们吗?

4

1 回答 1

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).tparticles(1).x(1)将是 1 的第一个xid。但是,使用 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.

于 2013-07-20T20:42:38.937 回答