我有一个numpy_array。比如[a b c]。

然后我想将它与另一个NumPy数组连接起来(就像我们创建列表的列表一样)。如何创建包含NumPy数组的NumPy数组?

我试着做下面的事情,但没有任何运气

>>> M = np.array([])
>>> M
array([], dtype=float64)
>>> M.append(a,axis=0)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'append'
>>> a
array([1, 2, 3])

当前回答

根据堆栈的方向,有很多方法可以将数组堆叠在一起。 例如,你可以考虑np.stack() (doc)、np.vstack() (doc)和np.hstack() (doc)。

其他回答

当您希望沿着一个现有的轴(按行)连接时,np。Vstack或np。Concatenate会为你工作。

有关连接操作的详细列表,请参阅官方文档。

Sven说这一切,只是非常谨慎,因为自动类型调整时,append被调用。

In [2]: import numpy as np

In [3]: a = np.array([1,2,3])

In [4]: b = np.array([1.,2.,3.])

In [5]: c = np.array(['a','b','c'])

In [6]: np.append(a,b)
Out[6]: array([ 1.,  2.,  3.,  1.,  2.,  3.])

In [7]: a.dtype
Out[7]: dtype('int64')

In [8]: np.append(a,c)
Out[8]: 
array(['1', '2', '3', 'a', 'b', 'c'], 
      dtype='|S1')

正如您所看到的,基于内容,dtype从int64到float32,然后到S1

如果我明白你的问题,我有一个办法。假设你有:

a = [4.1, 6.21, 1.0]

这里有一些代码…

def array_in_array(scalarlist):
    return [(x,) for x in scalarlist]

这就导致:

In [72]: a = [4.1, 6.21, 1.0]

In [73]: a
Out[73]: [4.1, 6.21, 1.0]

In [74]: def array_in_array(scalarlist):
   ....:     return [(x,) for x in scalarlist]
   ....: 

In [75]: b = array_in_array(a)

In [76]: b
Out[76]: [(4.1,), (6.21,), (1.0,)]

错误消息说明了一切:NumPy数组没有append()方法。然而,有一个免费函数numpy.append():

numpy.append(M, a)

这将创建一个新数组,而不是原地改变M。注意,使用numpy.append()涉及复制两个数组。如果使用固定大小的NumPy数组,您将获得性能更好的代码。

你可以使用numpy.append()…

import numpy

B = numpy.array([3])
A = numpy.array([1, 2, 2])
B = numpy.append( B , A )

print B

> [3 1 2 2]

这将不会创建两个单独的数组,而是将两个数组追加到一个一维数组中。