几周前我刚刚开始编程。我正在处理12个大型数据集,需要对表中特定列的值进行比较。每个表包含x-coordinates
(称为“X_IMA”)和y-coordinates
(称为“Y_IMA”)以及对此比较过程不重要的其他数据。数据来自4组3个表(我将称之为表11 ,表12 ,表13 ,用于数据集表1)
例如,我希望将表格11 与表格12 和表格13 进行比较,并检查是否存在x-coordinate
等于表2 中的x-coordinate
和表3 (在某个+-
范围内)。如果是这样,那么我想检查 y坐标是否相等,如果是这种情况,则认为这是匹配。
根据匹配项将附加数据写入新文件。我想比较所有4个数据集的匹配。我正在使用嵌套for循环和if语句进行比较;但是,代码需要 ~2小时才能在20核心群集上运行,这对于调试非常低效,并确保它实际上正常工作。有什么我可以做的来清理我的代码并缩短运行时间 - 要么整理循环以提高它们的效率,还是有其他方法以这种方式比较大数据集?
非常感谢任何输入:)
以下是表格比较中一组(4个)的代码:
for x in range(0, len(table11)):
for y in range(0, len(table12)):
for z in range(0, len(table13)):
if table12[y]["X_IMA"]-5<=table13[z]["X_IMA"]<=table12[y]["X_IMA"]+5 and table12[y]["Y_IMA"]-5<=table13[z]["Y_IMA"]<=table12[y]["Y_IMA"]+5 and table11[x]["X_IMA"]-5<=table13[z]["X_IMA"]<=table11[x]["X_IMA"]+5 and table11[x]["Y_IMA"]-5<=table13[z]["Y_IMA"]<=table11[x]["Y_IMA"]+5:
for i in range(0,20):,
if table11[x]["X_IMA"]-5<=reglistx[i]<=table11[x]["X_IMA"]+5 and table11[x]["Y_IMA"]-5<=reglisty[i]<=table11[x]["Y_IMA"]+5:
rateavg1[i]=(np.mean([table11[x]["RATE"],table12[y]["RATE"],table13[z]["RATE"]]))
reglist
是x-y坐标的主列表,我希望将3个表的匹配x-y坐标进行比较,然后从表中提取数据并将其写入文件。
同样,任何输入,甚至是提高计算速度的简单提示都将是一个巨大的帮助!
干杯!
答案 0 :(得分:0)
您当前代码的问题在于对所有值组合执行3向比较(这太多了)。因此,第一个初步改进是:
reglist
这里最重要的是检查表格的顺序 - 较小的表格应该是第一个(例如,如果table 11
比其他表格更大,请确保最后检查) 。
您可以做的第二项改进是事先按X_IMA
和Y_IMA
值对表格进行排序。通过这种方式,你可以:
必须有更好的方法来进一步加快这种速度,但无论如何,这些策略应该会对你的情况有所改善。
此外,如果您定义如下函数,它将提高代码的可读性:
def is_close(x, y, delta=5):
return abs(x-y) <= delta
并使用它而不是这些长篇if语句。