【发布时间】:2019-06-20 00:18:30
【问题描述】:
我正在尝试计算点之间的初始距离和后续距离。 我得到的数据是一个 csv,其中每三列对应一个 LED 标记。即第 1 列是标记 1 的 x 坐标,第 2 列是标记 1 的 y 坐标,第 3 列是标记 1 ets 的 z 坐标。每行对应于记录该位置的时间。 我很难找出组织数据的最佳方式,以便我可以使用它。 我需要 a) 在时间 0 找到标记之间的初始位置和初始距离 b) 找出不同时间标记之间距离的任何变化。
我最初将所有 x 坐标放在一个数组中,将所有 y 坐标放在一个数组中,将所有 z 坐标放在一个数组中,但意识到我不能(不知道如何?)迭代数组所以我可以找到相邻点之间的差异。 IE。标记 1 和标记 2 之间的距离是 sqrt((x2-x1)**2+(y2-y1)**2+(z2-z1)**2) 但由于 x2 和 x1 在同一个数组中,所以不能t (不知道怎么做?)迭代所有 xs (分别是 ys 和 zs )之间的差异。 在下面的代码中,我转置了数组,以便可以遍历行(而不是列)
for i in range(m): #where m is the number of markers
x_diff= x_array[i+1]-x_array[i]
y_diff=y_array[i+1]-y_array[i]
z_diff=z_array[i+1]-z_array[i]
dist=np.sqrt(x_diff**2+y_diff**2+z_diff**2)
我想要一个数组,其中每列是相邻标记之间的欧几里得距离,行对应于每次的距离。
【问题讨论】:
-
您的方法似乎很好:对于每个第 i 个元素,计算到下一个 (i+1th) 元素的距离。由于 i+1,当您到达最后一个元素时,您可能会访问数组末尾之后的 1,因此请确保
m说明了这一点。您能否进一步解释您所描述的方法存在哪些问题? -
所以我确实使用了 m-1 的范围来解释这一点。我遇到的问题是 x、y 和 z 坐标的每个数组的形状是 (23369,250),而结果数组 dist 的形状是 (23369,),即假设所有时间都被计算在内,但两点之间只有距离,而不是所有相邻点之间的距离。生成的数组应具有形状 (23369, 249)。
-
此行为表明
dist不会为每次迭代存储,而是被最近迭代的结果覆盖。您是否尝试在 for 循环之外声明dist = [],然后在每次迭代时执行dist.append(np.sqrt(...))之类的操作,而不是dist=? -
这成功了。谢谢!