【发布时间】:2011-08-08 07:48:22
【问题描述】:
一些用户询问过 numpy 或 scipy 中图像卷积的速度或内存消耗 [1、2、3、4]。从回复和我使用 Numpy 的经验来看,我认为这可能是 numpy 与 Matlab 或 IDL 相比的主要缺点。
到目前为止,没有一个答案解决了整个问题,所以这里是:“在 Python 中计算 2D 卷积的最快方法是什么?”常见的 python 模块是公平的游戏:numpy、scipy 和 PIL(其他?)。为了具有挑战性的比较,我想提出以下规则:
- 输入矩阵分别为 2048x2048 和 32x32。
- 单精度或双精度浮点均可接受。
- 不计算将输入矩阵转换为适当格式所花费的时间 - 仅计算卷积步骤。
- 用您的输出替换输入矩阵是可以接受的(有任何 python 库支持吗?)
- 对常用 C 库的直接 DLL 调用没问题 -- lapack 或 scalapack
- PyCUDA 是正确的。使用自定义 GPU 硬件是不公平的。
【问题讨论】:
-
“用你的输出替换输入矩阵是可以接受的(任何 python 库都支持吗?)”对于它的价值,大多数 numpy 和 scipy 函数都可以......
-
我在 convolve 的文档中没有看到任何提及:docs.scipy.org/doc/numpy/reference/generated/… 我错过了什么吗?
-
numpy 的 convolve 不支持,
scipy.ndimage.convolve支持。 scipy.org/SciPyPackages/Ndimage 此外,大多数 numpy 函数(例如sqrt、mul、add)都带有一个 out 参数。您可以使用np.sqrt(x, x)将 sqrt 就地执行。
标签: python optimization numpy python-imaging-library scipy