计算到坐标的距离

时间:2020-02-19 11:32:23

标签: python-3.x

我想从一个包含笛卡尔坐标的文件计算距离。我认为最好的方法是使用csv读取数据并尝试调整外观以计算点之间的距离。

坐标文件样本:(x y z)

0.0     0.0     1.2
0.0     0.0     2.4
0.0     0.0     3.6
0.0     0.0     4.8
0.0     0.0     6.0
0.0     0.0     7.2
0.0     0.0     8.4
0.0     0.0     9.6
0.0     0.0     10.8
0.0     0.0     12.0
0.0     0.0     13.2
0.0     0.0     14.4
0.0     0.0     15.6
0.0     0.0     16.8
0.0     0.0     18.0
0.0     0.0     19.2
0.0     0.0     20.4
0.0     0.0     21.6
0.0     0.0     22.8
0.0     0.0     24.0
2.10602 4.30161 15.4191
1.63363 3.84311 14.6922
1.0001799999999998      3.49724 14.0046
1.4663  2.88937 13.3751
0.9758450000000001      2.6336  12.8105
0.65735 1.4835200000000002      12.7484
0.46493 0.5138590000000001      12.9022
0.08873760000000001     -0.398863       12.5105
0.201499        -1.09372        11.6219
0.7903600000000001      -1.72045        11.0056
0.241616        -2.2128900000000002     11.9763
-0.20944000000000002    -2.29307        11.1821
-0.89938        -1.56606        11.1211
-1.41711        -2.4558 11.2009
-1.8840700000000001     -2.52969        12.2187
-1.81385        -1.49946        11.8263
-0.789176       -1.79308        12.1988
-1.17975        -1.1326 12.8
-1.0421200000000002     -0.111174       12.8198
-0.39158699999999996    -0.355446       13.5661
-0.453186       -0.8214870000000001     19.3475
-0.701328       -1.75309        19.3045
0.259701        -1.77368        18.8392
0.15001099999999998     -0.755324       18.3631
0.564654        -0.5530970000000001     17.6175
1.14706 -0.608927       16.8936
0.984617        -0.22286999999999998    15.9514
0.800405        -0.139544       14.949000000000002
0.823068        0.11181500000000001     13.8241
0.553984        -0.08825939999999999    12.8295
-0.23958600000000002    0.412857        12.4171
0.34061199999999997     0.7038409999999999      11.6287

我无法正确读取数据,而且我不确定是否要以最佳方式进行处理。谁能帮我?

Python代码:

import numpy as np

from math import sqrt



def length(frame):
    N=frame.shape[0]
    for i in range(N):
        for j in range(i+1,N):
            l = sqrt(np.linalg.norm(frame[j]-frame[i]))





len = list()
frame = list()
f = open('cartesian.csv') #
for line in f:
    frame=np.array(frame)
    len.append(length(frame))
    frame=list()

with open('output.txt', 'a') as g:
    for item in len:
        g.write("%s\n" % item)
g.close()

但是,在输出文件中,我得到的只是一个“无”列表。我不确定我是否正在采用正确的方法。

我要计算的方程是距离= sqrt((x2-x1)+(y2-y1)+(z2-z1))。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

我怀疑您只需要设置定界符即可。您的默认设置可能是逗号或分号-我认为这可能取决于位置设置。

创建阅读器时,设置:

reader = csv.reader(f, delimiter="\t")

(至少,如果分隔符是制表符,我认为是制表符,请查看您的数据)。

目前,数据中不包含分隔符(即,没有“,”),因此它仅读取一个字符串,只为您提供一个val而不是3。