我有一个包含一组数组的文本文件,如下所示:
[(0,1,3),(0,4,5),...(1,9,0)]
[(9,8,7),(0,4,5),...(1,9,0)]
其中行的长度不同。
这实际上是路径列表,其中每组点都是路径,即:
(0,1,3),(0,4,5),...(1,9,0) =path1
(9,8,7),(0,4,5),...(1,9,0) =path2
我需要以可以调用所有元素的形式导入它。例如,对于路径1中的所有点,确定到路径2中所有点的距离。不确定从何处开始考虑分隔符不想同时使用括号和逗号,然后以可调用的方式构建数组。
答案 0 :(得分:0)
以下代码读取数据(假设每行一个路径,没有额外的空格)到numpy数组列表中,然后演示如何计算两点之间的距离。
import numpy as np
import numpy.linalg as la
#replace with your datafile
datafile = "../data/point_path.txt"
paths = []
with open(datafile, "r") as f:
for line in f:
point_strs = line.strip().strip("[()]").split("),(")
npoints = len(point_strs)
path = np.empty((npoints, 3))
for i in xrange(npoints):
path[i,:] = np.array(map(int, point_strs[i].split(",")))
paths.append(path)
print "First point of path 1:"
print paths[0][0]
print "Second point of path 2:"
print paths[1][1]
print "Euclidean Distance between these points:"
print la.norm(paths[0][0]-paths[1][1])
这个输出是:
First point of path 1:
[ 0. 1. 3.]
Second point of path 2:
[ 0. 4. 5.]
Euclidean Distance between these points:
3.60555127546
编辑:如何格式化输入文件
该代码假定每个点列表都在其自己的行上(例如,对于f中的行,解析点列表)。所以以下文件:
[(0,2,3),(0,4,0)] [(1,4,5),(5,8,9),(3,4,0)] [(0,5,7),(0,6,8),(1,5,6),(5,8,10)]
不起作用,因为所有3个列表都在同一行。
此格式:
[(0,2,3),(0,4,0)]
[(1,4,5),(5,8,9),(3,4,0)]
[(0,5,7),(0,6,8),(1,5,6),(5,8,10)]
将起作用,因为每个点列表都在一个单独的行上。