在python2和python3中映射 [英] map in python2 vs python3

查看:150
本文介绍了在python2和python3中映射的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Python初学者,我已经在python2.7和python3.4.3上运行了以下代码

I'm a beginner python user and I've ran the following code on both python2.7 and python3.4.3

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats

alpha = 1
n = 100

u = stats.uniform(0,1)
F_inverse = lambda u: 1/alpha*np.log(1/(1-u))
v = np.array(map(F_inverse, u.rvs(n)))
print(v)

fig, ax = plt.subplots(1,1)
stats.probplot(v, (1,), dist='expon', plot=ax)
plt.show()

在python2上,我得到了一个很好的数组,如下所示:

On python2 i get a nice array like this:

array([  2.29133808e+00,   1.63236151e+00,   6.77776227e-01,
         3.33668250e-01,   1.77830890e+00,   3.06193068e-01,
         2.10677775e+00,   1.30525788e-01,   2.97056775e-01,
                           ...
         1.31463775e+00,   1.41840428e-03,   8.60594737e-01,
         1.80644880e-01])

在python3上,我得到了:

On python3 i get this:

array(<map object at 0x7f8aab6f3ef0>, dtype=object)

如果我对此进行更改:

v = np.array(map(F_inverse, u.rvs(n)))

v = list(map(F_inverse, u.rvs(n)))

在两者上都可以正常工作,但我想改用数组. 有没有办法让它与np.array一起使用?

it works fine on both but I would want to use an array instead. Is there a way to get this to work with np.array?

推荐答案

map object转换为列表,然后将其传递给numpy.array.

Convert the map object to list, then pass it to numpy.array.

v = np.array(list(map(F_inverse, u.rvs(n))))

或使用列表推导而不是map来创建列表,而不是map对象:

Or use list comprehension instead of map to make a list instead of map object:

v = np.array([F_inverse(x) for x in u.rvs(n)])

但是,您不需要使用map或不需要列表理解;只需直接调用F_inverse就足够了,因为F_inverse使用矢量化操作:

But, you don't need to use map or list comprehension is not requierd; just calling F_inverse directly is enough because the F_inverse uses vectorized operations:

v = F_inverse(u.rvs(n))

这篇关于在python2和python3中映射的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆