python并行计算numpy_如何在python numpy中并行化和计算?

我有一个总和,我正在尝试计算,我很难并行化代码.我试图并行化的计算有点复杂(它使用numpy数组和scipy稀疏矩阵).它吐出一个numpy数组,我想从大约1000个计算中求和输出数组.理想情况下,我会在所有迭代中保持运行总和.但是,我还没弄清楚如何做到这一点.

到目前为止,我已经尝试使用joblib的Parallel函数和pool.map函数与python的多处理包.对于这两个,我使用一个返回numpy数组的内部函数.这些函数返回一个列表,我将其转换为numpy数组,然后求和.

但是,在joblib并行函数完成所有迭代后,主程序永远不会继续运行(看起来原始作业处于挂起状态,使用0%CPU).当我使用pool.map时,在所有迭代完成后我得到内存错误.

有没有办法简单地并行化运行的数组总和?

编辑:目标是做以下的事情,除了并行.

def summers(num_iters):

sumArr = np.zeros((1,512*512)) #initialize sum

for index in range(num_iters):

sumArr = sumArr + computation(index) #computation returns a 1 x 512^2 numpy array

return sumArr

解决方法:

我想出了如何使用多处理,apply_async和回调并行化数组的总和,所以我在这里为其他人发布这个.我使用the example page for Parallel Python作为Sum回调类,虽然我实际上没有使用该包来实现.但它给了我使用回调的想法.这是我最终使用的简化代码,它完成了我想要它做的事情.

import multiprocessing

import numpy as np

import thread

class Sum: #a

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用NumpyPython的多线程库进行图像处理的并行。 首先,将图像加载到Numpy数组: ```python import numpy as np import cv2 img = cv2.imread('image.jpg') img = np.array(img) ``` 接下来,可以使用Numpy的矢量函数对图像进行处理。例如,下面的代码使用Numpy的multiply函数将图像的每个像素的红色通道值乘以2: ```python def process_image(img): img[:, :, 0] = np.multiply(img[:, :, 0], 2) return img processed_img = process_image(img) ``` 要并行这个处理过程,可以使用Python的多线程库。下面的代码使用4个线程并行图像处理: ```python import threading def process_image_thread(img, start_row, end_row): img[start_row:end_row, :, 0] = np.multiply(img[start_row:end_row, :, 0], 2) threads = [] num_threads = 4 rows_per_thread = img.shape[0] // num_threads for i in range(num_threads): start_row = i * rows_per_thread end_row = start_row + rows_per_thread thread = threading.Thread(target=process_image_thread, args=(img, start_row, end_row)) threads.append(thread) thread.start() for thread in threads: thread.join() processed_img = img ``` 在这个例子,每个线程处理图像的一个垂直切片。每个线程的开始和结束行由图像的总行数和线程数计算得出。每个线程使用process_image_thread函数处理它的切片。最后,所有线程都完成后,将处理后的图像存储在processed_img变量。 注意,使用多线程并不总是比单线程更快,因为线程切换和同步开销可能会使得并行变得更慢。因此,需要进行基准测试来确定最佳的线程数和处理方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值