1 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
您需要連接多個(gè)列的函數(shù)是np.hstack. 但是,一個(gè)很大的問題是 pool.map在原始代碼中沒有以正確的方式使用。
正如所寫,列沒有并行執(zhí)行,因?yàn)槊看握{(diào)用pool.map都只獲得一個(gè)列。這個(gè)想法是同時(shí)傳遞一個(gè)帶有多個(gè)值的迭代器——在這種情況下,多個(gè)列到pool.map.
由于numpy循環(huán)遍歷行而不是列,因此必須轉(zhuǎn)置矩陣(使用(...).T運(yùn)算符。此外,在pool完成后,關(guān)閉它是一個(gè)很好的措施。自動(dòng)處理此問題的一種方法是使用上下文(即with Pool() as pool:構(gòu)造,然后它將自動(dòng)關(guān)閉。
這一切加在一起給出了以下解決方案:
from multiprocessing import Pool
import numpy as np
def fct_norm(col):
mn = col.min()
mx = col.max()
col_norm = np.zeros((6, 1))
for i in range(6):
col_norm[i, 0] = (col[i] - mn) / (mx - mn)
return col_norm
if __name__ == "__main__":
arr = np.random.uniform(0, 100, size=(6, 3))
with Pool() as pool:
norm_arr = np.hstack(pool.map(fct_norm, arr.T))
# Here norm_arr is available for further operations.
因此,整個(gè)操作可以在兩行中執(zhí)行。
添加回答
舉報(bào)