【发布时间】:2018-09-01 17:07:39
【问题描述】:
我有一个复杂的 numpy 数组 signal,尺寸为 [10,1000,50000] 我需要在切片中修改这个数组。这是在 for 循环中完成的:
for k in range(signal.shape[2]):
signal[:,:,k] = myfunction(signal[:,:,k], constant1, constant2, constant5=constant5, constant6=constant6)
我尽可能优化了myfunction。当我运行脚本时,它需要相当长的时间,但只使用了 24 个 CPU 中的 1 个。
无法重写代码以使用 numpy 对整个数组执行 myfunction。
因此,我想通过并行计算加速我的代码。 python中的并行计算似乎有很多不同的方法。 哪一个似乎最适合我的问题?我该如何实现它?
【问题讨论】:
-
一般来说,当您使用 numpy 时,您希望避免在 python 代码中出现任何循环,而是找到正确的 numpy 函数,这些函数将一次性处理整个数组。然后由 numpy 来处理并行化。
-
什么是
myfunction? -
如果函数的参数是从切片中计算出来的,那么你可以告诉 numpy 为每个切片执行此操作。
-
好的,首先感谢所有反馈。我无法对整个数组执行计算来检索每个切片的参数。我需要在每个切片上独立执行 myfunction。 myfunction 太复杂了。再次感谢
-
使用 dask。旨在并行化 numpy 操作。
标签: python parallel-processing multiprocessing