我几周前刚开始编程。我正在处理12个大型数据集,需要对表的特定列中的值进行比较。每个表都包含x-coordinates
(称为'X\u IMA')和y-coordinates
(称为'Y\u IMA')以及其他对比较过程不重要的数据。数据分为4组,共3个表(对于数据集1的表,我称之为表11、表12、表13)
例如,我希望比较表11与表12和表13,并检查是否存在一个x-coordinate
,该x-coordinate
与表2和表3中的x-coordinate
相等(在某个+-
范围内)。如果是这样,我想检查y坐标是否相等,如果是这样,这就被认为是匹配
根据匹配项将附加数据写入新文件。我想比较所有4个数据集的匹配情况。我使用嵌套for循环和if语句进行比较;但是,代码在20核集群上运行需要~2小时,这对于调试和确保它实际正常工作来说是非常低效的。我能做些什么来清理我的代码并缩短运行时间?或者整理循环以提高效率,或者有其他方法以这种方式比较大型数据集
如有任何意见,我们将不胜感激:)
以下是一组(共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坐标与之进行比较,然后从表中提取数据并将其写入文件
再说一次,任何输入,哪怕是提高计算速度的小提示,都会有很大的帮助
干杯
当前代码的问题是对所有值的组合执行3向比较(这太多了)。因此,最初的改进是:
reglist
进行比较这里最重要的是检查表的顺序-较小的表应该排在第一位(例如,如果
table 11
比其他表大得多,请确保最后检查它)您可以做的第二个改进是预先按
X_IMA
和Y_IMA
值对表进行排序。这样,您可以:必须有更好的方法来进一步加快这一进程,但无论如何,这些策略应该在您的案例中显示出一些改进
此外,如果您定义这样的函数,也会提高代码的可读性:
用它来代替这些长if语句
相关问题 更多 >
编程相关推荐