bpa*_*ker 6 python arrays performance opencv matrix
我想我需要使用numpy或其他一些库来足够快地填充这些数组,但我不太了解它.现在这个操作在四核英特尔PC上大约需要1秒钟,但我需要它尽可能快.任何帮助是极大的赞赏.谢谢!
import cv
class TestClass:
def __init__(self):
w = 960
h = 540
self.offx = cv.CreateMat(h, w, cv.CV_32FC1)
self.offy = cv.CreateMat(h, w, cv.CV_32FC1)
for y in range(h):
for x in range(w):
self.offx[y,x] = x
self.offy[y,x] = y
Run Code Online (Sandbox Code Playgroud)
我八岁(慢)计算机能够在127毫秒内创建一个与矩阵大小相同的列表.
C:\Documents and Settings\gdk\Desktop>python -m timeit "[[x for x in range(960)]
for y in range(540)]"
10 loops, best of 3: 127 msec per loop
Run Code Online (Sandbox Code Playgroud)
我不知道cv模块是什么以及它如何创建矩阵.但也许这是代码速度慢的原因.
Numpy可能会更快.创建一个(python int)1s 数组:
C:\Documents and Settings\gdk\Desktop>python -m timeit -s "from numpy import one
s" "ones((960, 540), int)"
100 loops, best of 3: 6.54 msec per loop
Run Code Online (Sandbox Code Playgroud)
您可以比较使用不同模块创建矩阵的时间,以查看更改时间是否有益:timeit模块
您将生成 50 万个整数并创建超过 100 万个引用。我很高兴这只需要 1 秒钟。
如果您经常这样做,您应该考虑缓存结果的方法。
另外,在这种情况下,在四核上任何东西都无济于事,您正在执行一次只能在一个核心上执行的串行操作(即使您对其进行线程化,CPython也只能执行一个)由于全局解释器锁,一次纯Python线程)。