我对学习如何利用NumPy数组优化地理处理感兴趣。我的大部分工作都涉及“大数据”,其中地理处理通常需要几天的时间才能完成某些任务。不用说,我对优化这些例程非常感兴趣。ArcGIS 10.1具有许多可通过arcpy访问的NumPy函数,包括:
出于示例目的,假设我想利用NumPy数组优化以下处理密集型工作流程:
这里的总体思想是,有大量的基于矢量的点在矢量和基于栅格的操作中移动,从而生成二进制整数栅格数据集。
如何合并NumPy数组以优化此类工作流程?
我对学习如何利用NumPy数组优化地理处理感兴趣。我的大部分工作都涉及“大数据”,其中地理处理通常需要几天的时间才能完成某些任务。不用说,我对优化这些例程非常感兴趣。ArcGIS 10.1具有许多可通过arcpy访问的NumPy函数,包括:
出于示例目的,假设我想利用NumPy数组优化以下处理密集型工作流程:
这里的总体思想是,有大量的基于矢量的点在矢量和基于栅格的操作中移动,从而生成二进制整数栅格数据集。
如何合并NumPy数组以优化此类工作流程?
Answers:
我认为问题的症结在于工作流中的哪些任务不是真正依赖于ArcGIS的?显而易见的候选者包括表格和栅格运算。如果数据必须以gdb或某种其他ESRI格式开始和结束,那么您需要弄清楚如何最小化这种重新格式化的成本(即,最小化往返次数),甚至证明它是合理的-可能也是如此昂贵的合理化。另一个策略是修改您的工作流程,以便更早使用python友好的数据模型(例如,多久可以抛弃矢量多边形?)。
回显@gene,虽然numpy / scipy确实很棒,但是不要以为这些是唯一可用的方法。您也可以使用列表,集合,字典作为替代结构(尽管@ blah238的链接非常清楚效率差异),也有生成器,迭代器以及其他各种出色,快速,高效的工具,可在python中使用这些结构。Python开发人员之一Raymond Hettinger在那里拥有各种很棒的常规Python内容。这个视频是一个很好的例子。
另外,要添加@ blah238关于多路处理的想法,如果要在IPython(不只是“常规” python环境)中编写/执行,则可以使用其“并行”包来利用多个内核。我对这些东西不感兴趣,但是发现它比多处理东西更高级/对新手更友好。可能真的只是那里的个人宗教问题,所以请加一盐。该视频从2:13:00开始对此有很好的概述。总体而言,整个视频对IPython来说很棒。