0
我有一个3D脑图像矩阵数组,我正在为这些图像做一些处理。joblib.Parallel同时处理相同的数据集多次而不是不同的集
输入矩阵看起来像M [X,Y]:其中X是大脑ID和Y是我后来重新塑造它来作一些改进的
以下顺序代码数据做到完美:
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)
顺序(正常for循环)运行时,该代码部分的输出是:
脑:0
脑:1
大脑:2
大脑:3
...
的问题是,它需要很长的时间(大约60分钟)来处理所有的大脑。
我试图让代码并行运行,但我无法处理所有的大脑!只有脑0正在被多次处理。
还有就是我尝试并行代码:
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
...
任何想法如何解决这个问题? 感谢
您确定处理了同一组数据吗?生成的“brain:”这一行中的数字如何? –
是的,每个大脑都有相同的数据,这意味着如果我做X_train.shape然后我会得到278,6443008 – Kal
我认为这个问题是在这个声明中,但我不知道如何解决它:Parallel(n_jobs = num_cores) (对于X_train中的i,延迟(变换)(i)) – Kal