python - 在 python2 与 python3 中映射

标签 python arrays python-3.x numpy higher-order-functions

我是一个初学者 python 用户,我在 python2.7 和 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 上我得到一个像这样的漂亮数组:

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 上我得到这个:

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 一起工作?

最佳答案

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

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

或者使用列表理解而不是 map 来制作列表而不是 map 对象:

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

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

v = F_inverse(u.rvs(n))

关于python - 在 python2 与 python3 中映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42310335/

相关文章:

java - JCombobox接受字符数组

python - 二维数组的 Numpy 重复

python - 如何使用 tkinter GUI 可视化 matplotlib 预测?

用于不同环境(如开发、生产或暂存)的 Python 基础部署技术/包库

javascript - 通过循环变量引用 Javascript 数组元素

python - 从 Python 3.x 中的列表中提取 IP 和端口

python-3.x - pandas pd.read_table 支持 io.BytesIO 和 StringIO 吗?

python - 根据字典中的值创建 .csv

python - 使用 PIL.Image 和 ctypes 进行像素操作

python - 从现有列表创建新的列表累积列表