1
在Python 2.7有大numpy
矩阵字典,与基体的名称键入:返回地图结果密钥字典
import multiprocessing as mp
import numpy as np
names = ['A', 'B', 'C']
size = 40
matrices = {k:np.random.random([size,size]) for k in names}
我想运行在每个矩阵一些矩阵代数,使用multiprocessing
图书馆Pool.map
其中,根据机制的文档,是正常的Python map
的并联等效(所以如果我能做到这一点与内置的地图,我也许可以用Pool.map
做到这一点...)
def hard_maths(matrix):
return np.dot(np.linalg.inv(matrix),
matrix).round(0)
pool = mp.Pool()
results = pool.map(hard_maths, matrices.itervalues())
pool.close()
pool.join()
这使我的结果成为list
。
但我怎么能说哪个矩阵(A
,B
或C
)产生了哪个结果呢?在理想的世界中,results
最终会以与matrices
相同的键为键位并以值作为结果。
注意:我不希望每次都将整个matrices
列表传递给该函数,因为这会造成大量数据开销,从而影响多处理的效果。
我认为你需要为工作一个星图减少开销?尽管可以在函数中将该区段解压缩到名称和矩阵中。也作为一个猜测,'dict(pool.map(hard_maths,matrices.iteritems()))'会把它变成一个键控字典。 – GP89 2014-10-31 15:57:58
你不能像这样使用'map'。你需要使用'starmap',如果使用Python 3.3+,或者执行'def hard_maths(name_matrix):name,matrix = name_matrix' – dano 2014-10-31 15:58:11
@ GP89 - 你是对的。修复。 – tdelaney 2014-10-31 16:00:29