【发布时间】:2015-02-19 15:19:50
【问题描述】:
我必须遍历一个 800 000* 800 000 矩阵。我试图通过简单的循环来做到这一点,但这花了我很多时间。如何快速循环?
for in in xrange(800000):
for j in xrange(800000):
print i,j
通常,我使用 OpenCV 读取图像,然后我需要遍历每个像素,以便执行一些计算并与像素邻居的某些特征的值进行比较。当我运行一个循环时,我觉得它需要超过 2 天才能完成。
其实我想实现我自己版本的GrowCut算法。作者声称使用像我这样的计算机在不到 4 分钟的时间内执行该算法。但是,循环 1200*1100 矩阵需要很长时间(我测试过)。我怎样才能快速阅读它们?
【问题讨论】:
-
你在这里比较的是什么语言?你将无法用 python 击败 C 速度。不管你怎么努力:)
-
您也可以尝试隔离一段代码,其中循环处于某种独立状态(即使您必须删除一些操作)。 Python 循环的工作速度几乎变慢,但它也可能表明您的代码存在问题。也许循环超过阈值的像素可以帮助(使用np.where)等......
-
@ljetibo 我绝对需要读取每个像素的 RGB 值并将它们与该像素的邻居的值进行比较(如果需要,请查看我提供的链接......那个人编程了它在 Python 中也是如此,但是运行时出现错误)
-
试试这个链接,它列出了所有(默认)包:docs.continuum.io/anaconda/pkg-docs.html Numba 包括在内。另外,我知道我的 (OSX) Anaconda 发行版中有它。
-
对于 OpenCV,我个人看过这里:binstar.org/search?q=opencv(binstar 是一个分享 anaconda 包的地方)但也有这个:*.com/questions/23119413/… 根据我的记忆,OpenCV 在 Windows 上安装比在 OSX 上容易得多所以你会有几个选择。
标签: python arrays loops numpy matrix