我有数千个时间步长的粒子ID,x位置,y位置,x速度和y速度数据。我希望能够在多个时间步骤中使用find()
。例如,找到x和y速度低于某个值的所有时间和粒子。
我开始使用一系列矩阵来执行此操作:
particles{t}(particleIndex,dataType)
所以particles{40}(:,2)
将在步骤40给出我所有粒子的y位置
并且particles{50}(:,1)
将在步骤50的时间返回所有粒子的x位置。
这似乎是处理我的数据的一种笨拙的方法。我意识到我可以使用结构数组particles(t).id
,particles(t).xpos
等。我仍然难以在时间步骤中使用find()
并且无法找到任何指向的信息我在正确的方向。从我读过的内容看来,这也可能不是最好的选择。
我应该如何为我的目的存储这些数据?我是否可以跨时间步使用find()
而无需迭代它们?
答案 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
。