【发布时间】:2014-09-28 23:55:02
【问题描述】:
我编写的代码可以完美地处理小数据,但是当我在具有 52000 个特征的数据集上运行它时,它似乎卡在了下面的函数中:
def extract_neighboring_OSM_nodes(ref_nodes,cor_nodes):
time_start=time.time()
print "here we start finding neighbors at ", time_start
for ref_node in ref_nodes:
buffered_node = ref_node[2].buffer(10)
for cor_node in cor_nodes:
if cor_node[2].within(buffered_node):
ref_node[4].append(cor_node[0])
cor_node[4].append(ref_node[0])
# node[4][:] = [cor_nodes.index(x) for x in cor_nodes if x[2].within(buffered_node)]
time_end=time.time()
print "neighbor extraction took ", time_end
return ref_nodes
ref_node 和 cor_node 是一个元组列表,如下所示: [(FID、点、几何、链接、邻居)] 邻居是一个空列表,将在上述函数中填充。
正如我所说,打印出来的最后一条消息是此函数中的第一个打印命令。看起来这个功能太慢了,但对于 5200 万个功能,它不应该需要 24 小时,不是吗? 任何想法问题出在哪里或如何使功能更快?
【问题讨论】:
-
想想当你有 52000 个特征时发生的操作数。
-
我知道,但我怎样才能让它更快呢?它已经运行了将近一个晚上:(
-
要么更改算法以减少操作次数,要么使用更快的语言(如 C),或两者兼而有之。
-
52000 个特征还是样本?
point有 52000 个特征? -
@SAM:点就是特征。我需要找到距离参考点 10 米内的邻居。
标签: python function for-loop arcpy