Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NumPy-append与Python-append_Python_Numpy - Fatal编程技术网

NumPy-append与Python-append

NumPy-append与Python-append,python,numpy,Python,Numpy,在Python中,我可以附加到空数组,如: >>> a = [] >>> a.append([1,2,3]) >>> a.append([1,2,3]) >>> a [[1, 2, 3], [1, 2, 3]] 我怎么能在NumPy做同样的事np.append会将数组展平(我需要在开头有一个空数组)。我想您正在寻找: 使用np.append 让我们从一个空的二维数组开始: In [8]: a = np.array([]);

在Python中,我可以附加到空数组,如:

>>> a = []
>>> a.append([1,2,3])
>>> a.append([1,2,3])
>>> a
[[1, 2, 3], [1, 2, 3]]

我怎么能在NumPy做同样的事<很遗憾,code>np.append会将数组展平(我需要在开头有一个空数组)。

我想您正在寻找:

使用
np.append
让我们从一个空的二维数组开始:

In [8]: a = np.array([]); a = a.reshape((0, 3)); a
Out[8]: array([], shape=(0, 3), dtype=float64)
In [28]: a = np.array([]); a = a.reshape((0, 3)); a
Out[28]: 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.]])
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.]])
使用
np.连接
:
同样,让我们从一个空的二维数组开始:

In [8]: a = np.array([]); a = a.reshape((0, 3)); a
Out[8]: array([], shape=(0, 3), dtype=float64)
In [28]: a = np.array([]); a = a.reshape((0, 3)); a
Out[28]: 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.]])
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.]])

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

我建议创建一个包含一个元素/行/列的零数组,然后使用
np.append()
,最后删除第一个元素/行/列。我建议您是否可以预定义实际数组大小,而不是每次都更改大小。请列出您的列表,然后创建数组:
np.array(a)
。List
append
比array
append
快。NumPy通常会自动转换列表,所以我删除了不需要的
array()
转换。NumPy通常会自动转换列表,所以我删除了不需要的
array()
转换。这个答案比
append()
更合适,因为
vstack()。