我有一个空的numpy数组现在我想追加一个2d数组
ac
但我想要>>> import numpy as np
>>> a = np.array([])
>>> b = np.array([[1, 2], [3, 4]])
>>> np.append(a, b)
array([1, 2, 3, 4])
答案 0 :(得分:0)
以下是将'empty`数组与2d数组连接的两种方法,生成一个看起来与原始数组相似的新数组:
In [123]: b = np.array([[1, 2], [3, 4]])
In [124]: b.shape
Out[124]: (2, 2)
In [125]: np.concatenate((np.zeros((2,0),int),b),axis=1)
Out[125]:
array([[1, 2],
[3, 4]])
In [126]: _.shape
Out[126]: (2, 2)
In [127]: np.concatenate((np.zeros((0,2),int),b),axis=0)
Out[127]:
array([[1, 2],
[3, 4]])
关于尺寸匹配数量和非连接形状匹配的通常规则适用。另请注意dtype
。
append
,vstack
,hstack
摆弄形状,然后concatenate
。最好了解如何直接使用concatenate
。
但是有人可能会问,为什么要进行所有这些连接工作,只产生一个匹配的数组? b.copy()
更简单。
如果这是循环的开始,请不要。使用list append构建一个数组列表,然后在最后连接一次。 concatenate
获取数组列表。 np.append
只需要2个输入,并以不同方式对待它们。我不赞成使用它。
你是否认真想要3D结果而不是2d?
In [128]: np.array([[[1, 2], [3, 4]]])
Out[128]:
array([[[1, 2],
[3, 4]]])
In [129]: _.shape
Out[129]: (1, 2, 2)
我撰写的关于匹配维度的concatenate
的内容仍然适用。例如,创建一个具有正确形状的“空”(0,2,2)
并将b
展开为(1,2,2)
。
In [130]: np.concatenate((np.zeros((0,2,2),int),b[None,...]),axis=0)
Out[130]:
array([[[1, 2],
[3, 4]]])
b[None,...]
是(1,2,2),所以不需要连接任何东西。
有一个np.stack
,它为所有输入数组添加一个维度,然后连接。但我不知道这可以在这里适用。唯一可以添加到带有堆栈的(2,2)数组的是另一个(2,2)数组。
答案 1 :(得分:0)
以下是一种使其有效的方法:
# start with zero layers of the right shape:
>>> a = np.empty((0, 2, 2), int)
>>> a
array([], shape=(0, 2, 2), dtype=int64)
>>> b = np.arange(1, 5).reshape(2, 2)
>>> b
array([[1, 2],
[3, 4]])
# use np.r_ instead of append the spec string '0,3,1' means concatenate
# along axis 0, make everything 3D, operands with fewer than 3
# get 1 axis added on the left
>>> np.r_['0,3,1', a, b]
array([[[1, 2],
[3, 4]]])