我经常做以下事情:
import numpy as np
def my_generator_fun():
yield x # some magically generated x
A = []
for x in my_generator_fun():
A += [x]
A = np.array(A)
有没有更好的解决方案,从一开始就在numpy数组上运行,避免创建标准的python列表?
请注意,+ =运算符允许使用任意大小的数组扩展空的无量纲数组,而np.append和np.concatenate需要相同尺寸的数组。
答案 0 :(得分:4)
使用np.fromiter
:
def f(n):
for j in range(n):
yield j
>>> np.fromiter(f(5), dtype=np.intp)
array([0, 1, 2, 3, 4])
如果您事先知道迭代器要返回的项目数,您可以使用count
关键字参数加快速度:
>>> np.fromiter(f(5), dtype=np.intp, count=5)
array([0, 1, 2, 3, 4])
答案 1 :(得分:0)
要获取相同的数组A
,请执行:
A = numpy.arange(5)
数组通常不是动态调整大小的,但您可以使用numpy.concatenate
。