在python中使用map

在python中使用map,python,numpy,map,functional-programming,Python,Numpy,Map,Functional Programming,我正试图找出在python中正确使用map的方法,这样我就可以通过Pool.map对程序进行多线程处理。基本上,我在试图理解函数式python的工作原理时遇到了一些问题。我有: import numpy as np def maptest(foo,bars): print foo * bars main(): matA = np.eye(2) matB = np.eye(2) print map((lambda foo: maptest(foo, matB)), m

我正试图找出在python中正确使用map的方法,这样我就可以通过Pool.map对程序进行多线程处理。基本上,我在试图理解函数式python的工作原理时遇到了一些问题。我有:

import numpy as np

def maptest(foo,bars):
   print foo * bars

main():
   matA = np.eye(2)
   matB = np.eye(2)

   print map((lambda foo: maptest(foo, matB)), matA) 
这给了我一个输出:

[[ 1.  0.]
 [ 0.  0.]]
[[ 0.  0.]
 [ 0.  1.]]
[None, None]
当我想要的输出只是:

[[1. 0.]
 [0. 1.]]

地图呼叫怎么了我能吗?这是我第一次使用map和lambda。我用过lambdify和sympy,但这是我的函数式经验。谢谢

这个[None,None]来自于打印map调用(请注意,您的maptest函数会打印!)


现在,它打印这些多个数组的原因是您正在映射所有mapA中的函数。mapA实际上是一个两元素数组,map将函数应用于数组的每个元素。因此,打印[1,0][[1,0][0,1]],然后打印[0,1][[1,0][0,1]]。您没有将矩阵相乘,而是进行了两次乘法,mapA的每个元素一次。

现在这更有意义了。谢谢我已经去掉了打印,所以[None,None]不再显示,但是我如何改变map调用以正常进行乘法,而不是将matA的每个元素相乘?您必须将
matA
包装在另一个iterable中。一个单元素元组,例如:
map((lambda foo:maptest(foo,matB)),(matA,)
或list
[matA]
@sebastian Ah!所以现在如果我把玛塔包起来,它就行了!但是现在如果我改变,比如说matA到[[0,1],[1,0]],我得到了[[0,1],[1,0]]的解,它应该在[[0,0],[0,0]]。现在怎么了?不,没错。单位矩阵乘以任何第二个矩阵就是第二个矩阵。你完全正确。这是在深夜发布的,所以我只是装聋作哑——真的只是需要睡觉。谢谢