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()
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])
On python3 i get this:
array(<map object at 0x7f8aab6f3ef0>, dtype=object)
If I change this:
v = np.array(map(F_inverse, u.rvs(n)))
to
v = list(map(F_inverse, u.rvs(n)))
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?
list(map(foo, bar))on Py3 is exactly equivalent tomap(foo, bar)on Py2. So if the latter works somewhere on Py2, and it must work that way on Py3, substitute in the former, and it will be fine.