我有n
个形状数组
(86,)
我有一个空数组
complete = np.array([])
我要将这些n
数组附加到其上。当我现在使用它时
complete = np.append(complete, feature_1)
当我继续将数组形状更改附加到(172,)
,(258)
...等时,但是我想以这样的方式添加,使其像这样(1, 86)
,{ {1}},(2, 86)
等。最终的形状是我想要的(3, 86)
。
任何有关如何实现此目标的建议都会有所帮助。预先感谢。
答案 0 :(得分:2)
我想您最好创建一个空的2D数组并在以后填充它...
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]: