在 python2 与 python3 中映射
map in python2 vs python3
我是初学者 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 object
转换为列表,然后将其传递给 numpy.array
。
v = np.array(list(map(F_inverse, u.rvs(n))))
或者使用列表理解而不是地图来制作列表而不是地图对象:
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.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 object
转换为列表,然后将其传递给 numpy.array
。
v = np.array(list(map(F_inverse, u.rvs(n))))
或者使用列表理解而不是地图来制作列表而不是地图对象:
v = np.array([F_inverse(x) for x in u.rvs(n)])
但是,您不需要使用 map
或者不需要列表理解;直接调用 F_inverse
就足够了,因为 F_inverse
使用矢量化操作:
v = F_inverse(u.rvs(n))