比较两个文件中的x,y,z坐标

时间:2019-09-19 12:26:13

标签: python python-3.x performance numpy

我在编程中非常新鲜,所以我可能会问一些非常基本的问题。我有一个由x,y,z坐标和第四个值组成的文件,以及另一个具有x,y,z值的文件。第二个文件的坐标随机包含在第一个文件中。我想做的是在第一个文件中搜索第二个文件的确切坐标,如果相同,则修改第一个文件的第四个值。

我写了一些有用的东西,但是非常耗时(需要三个小时..)。第一个文件约为30万行,分为4列,第二个文件约为100K,分为三列。

在我编写的代码下面:

SUM(CASE WHEN Qualifying Premium = 0 THEN 0
         WHEN Team = 'Team One' THEN (0.1 - [BONUSQ%])*[Monthly Salary]
         ELSE (0.2 - [BONUSQ%])*Monthly Salary END)

如果您有任何建议可以加快此过程的速度,请告诉我!

1 个答案:

答案 0 :(得分:1)

您应该使用setdict来存储文件中的坐标。这样,您可以执行O(1)查找,而不必比较两个文件中的每一对或坐标。因此,您只有300k + 100k个迭代,而不是300k x 100k。这样的东西(未经测试):

coords_first = {}
with open('first file.txt', 'r') as t1:
    for line in t1:
        *pts, val = map(float, line.split())
        coords[pts] = val

coords_second = set()
with open('second file.txt', 'r') as t2:
    for line in t2:
        pts = tuple(map(float, line.split()))
        coords_second.add(pts)

with open('result file.txt', 'w') as outFile:
    for pts in coords_first:
        if pts in coords_second:
            new_val = coords_first[pts] + 970000000
            # write points and new value to file

在这里,coords_first正在将坐标从第一个文件映射到值,即{(x1,y1,z1): v1, (x2,y2,z2): v2, ...}coords_second只是第二个文件中的一组坐标。您也可以不用它,而在迭代第二个文件时直接写结果文件。