在 Python 2 中,我可以执行以下操作:
import numpy as np
f = lambda x: x**2
seq = map(f, xrange(5))
seq = np.array(seq)
print seq
# prints: [ 0 1 4 9 16]
在 Python 3 中它不再工作了:
import numpy as np
f = lambda x: x**2
seq = map(f, range(5))
seq = np.array(seq)
print(seq)
# prints: <map object at 0x10341e310>
如何获得旧行为(将 map
结果转换为 numpy
数组)?
编辑:正如@jonrsharpe 在他的回答中指出的那样,如果我先将 seq
转换为列表,则可以解决此问题:
seq = np.array(list(seq))
但我希望避免对 list
的额外调用。
最佳答案
除了@jonrsharpe 已经指出的有效解决方案之外,另一种选择是使用 np.fromiter
:
>>> import numpy as np
>>> f = lambda x: x**2
>>> seq = map(f, range(5))
>>> np.fromiter(seq, dtype=np.int)
array([ 0, 1, 4, 9, 16])
关于python - 在python 3中将 map 对象转换为numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28524378/