在Python中,我可以附加到一个空数组,如:
>>> a = []
>>> a.append([1,2,3])
>>> a.append([1,2,3])
>>> a
[[1, 2, 3], [1, 2, 3]]
我如何在NumPy中做同样的事情?不幸的是np.append
使数组变平(我需要在开头有一个空数组)。
答案 0 :(得分:20)
OP打算从空数组开始。所以,这是使用NumPy的一种方法
In [2]: a = np.empty((0,3), int)
In [3]: a
Out[3]: array([], shape=(0L, 3L), dtype=int32)
In [4]: a = np.append(a, [[1,2,3]], axis=0)
In [5]: a
Out[5]: array([[1, 2, 3]])
In [6]: a = np.append(a, [[1,2,3]], axis=0)
In [7]: a
Out[7]:
array([[1, 2, 3],
[1, 2, 3]])
但是,如果您要附加在大量循环中。首先附加列表并转换为数组比附加NumPy数组更快。
In [8]: %%timeit
...: list_a = []
...: for _ in xrange(10000):
...: list_a.append([1, 2, 3])
...: list_a = np.asarray(list_a)
...:
100 loops, best of 3: 5.95 ms per loop
In [9]: %%timeit
....: arr_a = np.empty((0, 3), int)
....: for _ in xrange(10000):
....: arr_a = np.append(arr_a, np.array([[1,2,3]]), 0)
....:
10 loops, best of 3: 110 ms per loop
答案 1 :(得分:1)
我认为您正在寻找vstack
:
>>> import numpy as np
>>> a = [1, 2, 3]
>>> b = [1, 2, 3]
>>> np.vstack((a, b))
array([[1, 2, 3],
[1, 2, 3]])
答案 2 :(得分:0)
np.append
让我们从一个空的二维数组开始:
In [8]: a = np.array([]); a = a.reshape((0, 3)); a
Out[8]: array([], shape=(0, 3), dtype=float64)
现在,让我们附加一些行:
In [19]: a = np.append(a, [[1, 2, 3]], axis=0 ); a
Out[19]: array([[ 1., 2., 3.]])
In [20]: a = np.append(a, [[1, 2, 3]], axis=0 ); a
Out[20]:
array([[ 1., 2., 3.],
[ 1., 2., 3.]])
np.concatenate
:再次,让我们从一个空的二维数组开始:
In [28]: a = np.array([]); a = a.reshape((0, 3)); a
Out[28]: array([], shape=(0, 3), dtype=float64)
现在,让我们连接一些行:
In [29]: a = np.concatenate( (a, [[1, 2, 3]]), axis=0 ); a
Out[29]: array([[ 1., 2., 3.]])
In [30]: a = np.concatenate( (a, [[1, 2, 3]]), axis=0 ); a
Out[30]:
array([[ 1., 2., 3.],
[ 1., 2., 3.]])