映射python2与python3

前端之家收集整理的这篇文章主要介绍了映射python2与python3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我是初学python用户,我在python2.7和python3.4.3上运行了以下代码

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import scipy.stats as stats
  4. alpha = 1
  5. n = 100
  6. u = stats.uniform(0,1)
  7. F_inverse = lambda u: 1/alpha*np.log(1/(1-u))
  8. v = np.array(map(F_inverse,u.rvs(n)))
  9. print(v)
  10. fig,ax = plt.subplots(1,1)
  11. stats.probplot(v,(1,),dist='expon',plot=ax)
  12. plt.show()

在python2上我得到一个像这样的好数组:

  1. 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,...
  2. 1.31463775e+00,1.41840428e-03,8.60594737e-01,1.80644880e-01])

在python3上,我得到这个:

  1. array(

如果我改变了这个:

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

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

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

最佳答案
将地图对象转换为列表,然后将其传递给numpy.array.

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

或者使用list comprehension而不是map来创建列表而不是map对象:

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

但是,你不需要使用地图或列表理解是不需要的;直接调用F_inverse就足够了,因为F_inverse使用向量化操作:

  1. v = F_inverse(u.rvs(n))

猜你在找的Python相关文章