我想你最好创建一个空的二维数组,稍后再填充它…
import numpy as np
N = how_many()
L = how_long()
complete = np.empty((N, L), dtype=float)
for i in range(N):
complete(i, :) = extract_feature(i)
代替
dtype=float
根据问题的需要,可以使用不同的数字类型。
例如。,
In [14]: a = np.empty((2,4), dtype=float)
In [15]: for i in (0, 1):
...: a[i,:] = np.ones(4)*i
...:
In [16]: a
Out[16]:
array([[0., 0., 0., 0.],
[1., 1., 1., 1.]])
附录
论效率
如果事先知道数组的维数,他们将一行一行地构造数组,那么上面的方法更好,因为它经常避免
全部查找新内存,将临时结果和新行复制到新内存,并释放用于保存上一个临时结果的内存。
使用连接的替代方法
另一方面,如果一个人事先不知道在创建数组的过程中会产生多少行,或者坚持使用次优解,
他们可以使用
np.vstack
我是说,
将新行的结果封装在
发电机
import numpy as np
def features_factory(stuff):
while true:
feature = new_feature(stuff)
if feature:
yield feature
else:
return
complete = np.vstack(features_factory(todays_stuff))
例如。,
In [1]: import numpy as np
In [2]: np.random.seed((2018+7+8)) # today's stuff... ;)
In [3]: def features_factory(stuff):
...: n = 0
...: while True:
...: if n<stuff:
...: yield np.ones(5)*n
...: n = n+1
...: else:
...: return
In [4]: complete = np.vstack(features_factory(np.random.randint(5,11)))
In [5]: complete
Out[5]:
array([[0., 0., 0., 0., 0.],
[1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4.],
[5., 5., 5., 5., 5.],
[6., 6., 6., 6., 6.],
[7., 7., 7., 7., 7.]])
In [6]: