繁体   English   中英

Python:同时对二维数组的每个像素执行操作

[英]Python: Perform an operation on each pixel of a 2-d array simultaneously

我想在2维数组上应用3x3或更大的图像滤镜(高斯或中值)。

尽管有几种方法可以做到这一点,例如scipy.ndimage.gaussian_filter或应用循环,但我想知道是否可以同时在mxn数组的每个像素上应用3x3或更大的滤镜,因为这样可以节省一个很多时间绕过循环。 功能编程可以用于此目的吗?

有一个名为scipy.ndimage.filters.convolve的模块,请告知其是否能够执行同时操作。

您可能想了解有关Python并行处理的信息: http : //wiki.python.org/moin/ParallelProcessing或特别是multiprocessing软件包: http : //docs.python.org/library/multiprocessing.html

使用多处理器上的Python Imaging Library(PIL)签出。 对PIL和类似问题使用多重处理

您可以创建四个工作器,将图像划分为四个,然后将每个象限分配给一个工作器。 但是,您可能会浪费时间进行开销。 另一方面,如果要处理多个图像,则此方法可能有效(让每个工作人员打开自己的图像)。

即使python确实提供了在不循环的情况下将操作应用于NxM阵列的功能,该操作仍不会在后台同时执行,因为每个周期CPU可以处理的指令数量受到限制,因此无法节省时间。 对于您的用例,这甚至可能适得其反,因为阵列中的字段可能具有依赖性,并且如果您不知道以什么顺序访问它们,则很可能会陷入混乱。

Hugues提供了一些有关Python中并行处理的有用链接,但是在访问同一数据结构(例如同时具有多个线程的数组)时要小心。 如果不同步线程,它们可能会同时访问数组的同一部分并使事情搞砸。
请注意,可以有效并行运行的线程数量受到处理器内核数量的限制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM