2013-07-10 23 views
1

我有一个python脚本,它读取两个tiff图像并查找唯一组合,计数观察值并将计数保存到txt文件。为阵列操作改进python性能

你可以找到完整的脚本in www.spatial-ecology.net

结果是:

tif1 

2 2 3 

0 0 3 

2 3 3 

tif2 

2 2 3 

3 3 4 

1 1 1 

result 

2 2 2 

3 3 1 

0 3 2 

3 4 1 

2 1 1 

3 1 2 

该脚本工作正常。 这是如何实现的。由线

  1. 读取线(用于在顺序在存储器中(最终的标志选项可以被插入到读取10由10条线)

  2. 不加载完整图像中的范围irows(行):)
  3. 走线槽的阵列,并创建一个元组

  4. 检查,如果元组已经存储在DIC()

我的问题是: 这是在这种情况下加快这一过程的技巧?

我测试过将结果保存在2维数组而不是dic()中,但它减慢了过程。 我检查this link,也许python地图功能可以提高速度。 是这样吗?

在此先感谢 朱塞佩

+1

你应该明确地描述一下,就像下面Slater的回答一样。但是Python中大多数数值较大的处理问题可以通过'numpy'解决。除此之外,您可以检出Python Imaging Library(PIL)。这两个库都旨在有效解决这些问题。 – HardlyKnowEm

回答

2

如果您想对性能的一些实际的建议,你需要发布你的代码是直接有关你想要做什么零件。如果你至少不会这样做,那么我们可以做的很少。也就是说,如果你在发现你的低效率的地方有问题,我会推荐使用python的cProfile模块高度。用法如下:

import cProfile 

def foo(*args, **kwargs): 
    #do something 

cProfile.run("foo(*args, **kwargs)") 

这将打印您的代码,它可以让你知道你的代码的步骤占用了大部分时间的详细时间曲线。通常情况下,它会被调用的次数比应该被调用的次数要多,或者做一些导致性能瓶颈的愚蠢的额外处理。

+0

您还可以使用[line_profiler](http://pythonhosted.org/line_profiler/)来逐行提供时间,而不是逐个函数。 –