2014-02-13 69 views
3

我想弄清楚在Python中正确使用地图的方式,以便我可以通过Pool.map多线程我的程序。基本上我遇到了一些问题,试图了解Python的功能如何工作。我有:在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。我用sympy使用了lambdify,但这都是为了我的功能体验。谢谢!

回答

5

[无,无]来自打印地图调用(请注意,您的maptest函数会打印!)。

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

+0

这使得现在更有意义。谢谢!我已经取出印刷品以便[None,None]不再显示,但是如何改变地图调用来正常进行这种乘法运算而不是乘以matA的每个元素? – faceforest

+1

你必须在另一个迭代中包装'matA'。一个元素元组,例如:'map((lambda foo:maptest(foo,matB)),(matA,))'或者list [matA]'。 – sebastian

+0

@sebastian啊!所以,现在如果我换了matA它的作品!但现在如果我改变了,说matA为[[0,1],[1,0]],我得到了[[0,1],[1,0]]的解,它应该是[[0, 0],[0,0]。现在发生了什么? – faceforest