1 回答

TA贡献1821条经验 获得超5个赞
您需要连接多个列的函数是np.hstack. 但是,一个很大的问题是 pool.map在原始代码中没有以正确的方式使用。
正如所写,列没有并行执行,因为每次调用pool.map都只获得一个列。这个想法是同时传递一个带有多个值的迭代器——在这种情况下,多个列到pool.map.
由于numpy循环遍历行而不是列,因此必须转置矩阵(使用(...).T运算符。此外,在pool完成后,关闭它是一个很好的措施。自动处理此问题的一种方法是使用上下文(即with Pool() as pool:构造,然后它将自动关闭。
这一切加在一起给出了以下解决方案:
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.
因此,整个操作可以在两行中执行。
添加回答
举报