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