首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >joblib.Parallel多次处理同一组数据,而不是处理不同的集合。

joblib.Parallel多次处理同一组数据,而不是处理不同的集合。
EN

Stack Overflow用户
提问于 2017-10-14 09:28:11
回答 1查看 629关注 0票数 0

我有一个三维大脑图像的矩阵数组,我正在对这些图像做一些处理。

输入矩阵看起来像MX,Y:其中X是大脑id,Y是数据,我稍后对它进行了一些改进。

下面的顺序代码完美地完成了这一任务:

代码语言:javascript
运行
复制
def transform(X):
 data = np.reshape(X, (-1, 176, 208, 176))
 data_cropped = np.empty((data.shape[0], 90, 100, 70))
 for idx in range(0, data.shape[0]):
    data_cropped[idx, :, :, :] = data[idx, 40:130, 40:140, 50:120]

 data_cropped = perm(data_cropped)
 #data_cropped = impute_data(data_cropped)
 data_cropped = np.reshape(data_cropped, (data_cropped.shape[0], -1))
 #data_cropped = data_cropped[:, np.apply_along_axis(np.count_nonzero, 0, data_cropped) != 0]

 return data_cropped


X_train = np.load("./data_original/X_train.npy")
X_crop = transform(X_train)

此代码部分在顺序运行时的输出(通常为循环)是:

大脑:0

大脑:1

大脑:2

大脑:3

..。

问题是,处理所有的大脑需要很长时间(大约60分钟)。

我试图使代码并行运行,但我无法处理所有的大脑!只有大脑0被多次处理。

下面是我将代码并行化的尝试:

代码语言:javascript
运行
复制
num_cores = multiprocessing.cpu_count()
X_train = np.load("./data_original/X_train.npy")
X_crop = Parallel(n_jobs=num_cores)(delayed(transform)(i) for i in X_train)

但我得到了这个结果:

大脑:0

大脑:0

大脑:0

大脑:0

..。

知道怎么解决这个问题吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-14 10:08:15

你需要

  • 将数据适当地拆分到作业和
  • 提供员工编码信息,以正确生成显示的大脑索引。

for i in X_train生成一行X_train (沿第一个维度),一次只生成一个,并且它们比初始数组少一个维度:

代码语言:javascript
运行
复制
In [7]: a=np.random.random((2,10))

In [10]: a.shape
Out[10]: (2, 10)

In [11]: [i.shape for i in a]
Out[11]: [(10,), (10,)]

由于您没有给出所有的示例代码来重现问题,所以我不能说您的处理代码期望的是什么形状。

然后,很明显,"brain:“后面的数字是输入中一行的索引。如果将每个作业作为输入数组的一部分,自然,它们都会产生相同的索引。你需要以某种方式告诉每个作业它的开始指数,这样他们才能正确地计算绝对指数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46742971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档