python - 轨迹总长度

标签 python euclidean-distance

我有一个包含 2 列的矩阵,对应于轨迹中点的坐标 (x,y)。我想使用欧氏距离计算轨迹的总长度。

首先我打开我的轨迹文件

fichier="fichier_position_2_test.txt"
file = open(fichier, "rb")
for ligne in file:
    ligne = ligne.split(' ')
    m.append(array([(ligne[1]),(ligne[2])]))

然后我计算矩阵中两点之间的欧氏距离

def T(mat):
    n=len(mat)
    M=[0 for x in range(mat)]
    for j in range(0,n-1):
        val = sqrt((mat[j+1][0]-mat[j][0])*(mat[j+1][0]-mat[j][0]) + (mat[j+1][1]-mat[j][1])*(mat[j+1][1]-mat[j][1]))
        M.append(val)
        L = sum(M)
    return L

但是效果不太好

这是我的文件 http://s000.tinyupload.com/?file_id=26745790747175243934

这里有一些测试

#TEST
A = array([(-4e-9,7.2e-6),(-5.7e-4,3.7e-4),(-8.7e-3,5.7e-3),(-1.2e-3,7.1e-4)])
print T(A)
print T(m)

结果

0.0194054064971
Traceback (most recent call last):
File "tortuosity.py", line 46, in <module>
print T(m)
File "tortuosity.py", line 37, in T
val = sqrt((mat[j+1][0]-mat[j][0])*(mat[j+1][0]-mat[j][0]) + (mat[j+1][1]-mat[j][1])*(mat[j+1][1]-mat[j][1]))
TypeError: unsupported operand type(s) for -: 'numpy.string_' and 'numpy.string_'

我认为问题出在矩阵m上。因为,请参阅矩阵 A(示例),它给出了预期结果 (0.0194054064971)

最佳答案

问题似乎是您从未将文件中的字符串转换为 float 。因此你的数组包含很多字符串(看起来像数字,但仍然是字符串),并且你无法区分字符串。

要使代码正常工作,至少要将这一行更改为:

m.append(array([float(ligne[1]), float(ligne[2])]))

但请注意,还有一些其他小问题:

  • 您正在使用 0 初始化距离列表,但随后您会附加到现有的零,而不是覆盖它们
  • 事实上,你根本不需要那个列表,直接计算总和即可
  • 通过使用幂运算符**,您可以使代码变得更加简单,而不是重复相同的表达式两次
  • 您可以使用zip(list, list[1:])来迭代连续行对
  • 使用元组解包而不是索引来使代码更具可读性
  • 使用 with 打开文件,并且不要使用 file 作为变量名,因为它会隐藏类型

总而言之,您可以使代码更加紧凑:

def T(mat):
    return sum( sqrt((y2-y1)**2 + (x2-x1)**2) for (x1, y1), (x2, y2) in zip(mat, mat[1:]))

with open("fichier_position_2_test.txt") as f:
    m = np.array([(float(items[1]), float(items[2])) for items in (line.split() for line in f)])
    print T(m)

正如预期,m 的结果是 0.00132038721131A 的结果是 0.0194054064971

关于python - 轨迹总长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30974837/

相关文章:

python - 帕斯卡三角形 - 类型错误

python - SQLAlchemy - 同一张表中的父子关系

c++ - 来自点列表的最佳路径c++

python - 优化计算两幅图像之间的欧式距离的性能

python - 点之间的欧几里得距离

python - Python 中 3-D 点之间的最小、平均和最大距离

python - kivy:该模块引发了一个重要错误: "Couldn' t 找不到匹配的 GLX 视觉”

python - Python 函数超时 API

python - 如何使用远程主机运行 flask 和 mongoengine?

python - Pandas 群体内的平均距离