Python Numpy将二维数组附加到行上的for循环中

Python Numpy将二维数组附加到行上的for循环中,python,numpy,append,numpy-ndarray,Python,Numpy,Append,Numpy Ndarray,我想垂直附加在for循环中创建的二维数组。 我尝试了append方法,但这不会垂直堆叠(我不想避免以后重新塑造结果),我尝试了vstack()函数,但这对空数组不起作用。 有人知道如何解决这个问题吗 import numpy as np mat = np.array([]) for i in np.arange(3): val = np.random.rand(2, 2) mat = np.append(mat,val) 我可以想出以下解决方案: for i in np.ara

我想垂直附加在for循环中创建的二维数组。
我尝试了append方法,但这不会垂直堆叠(我不想避免以后重新塑造结果),我尝试了vstack()函数,但这对空数组不起作用。 有人知道如何解决这个问题吗

import numpy as np
mat = np.array([])
for i in np.arange(3):
    val = np.random.rand(2, 2)
    mat = np.append(mat,val)
我可以想出以下解决方案:

for i in np.arange(3):
    val = np.random.rand(2, 2)
    if i==0:
        mat = val
    else:
        mat = np.vstack((mat,val))

是否有一种解决方案,我只附加值“val”,而不指定额外的if-else语句?

使用np.empty初始化空数组并定义要跨其附加的轴:

import numpy as np
mat = np.empty((0,2))
for i in np.arange(3):
    val = np.random.rand(2, 2)
    mat = np.append(mat,val, axis=0)
print(mat)
输出:

[[0.08527627 0.40567273]
 [0.39701354 0.72642426]
 [0.17540761 0.02579183]
 [0.76271521 0.83032347]
 [0.08105248 0.67986726]
 [0.48079453 0.37454798]]

但是,正如我在评论中所说的,如果需要多次追加,那么应该考虑初始化一个大小正确的数组,然后使用np.append()赋值,或者改为追加到一个列表(如果不知道数组的大小),然后在

之后创建一个numpy数组是否要追加二维数组以生成三维数组,还是只向下展开二维阵列?阵列的预期形状是什么?你提前知道阵列的形状吗?使用np.append很慢,因为每次调用它时都会创建一个新数组。如果可以用零初始化数组,那么添加更好的数据。或者,您可以创建一个列表列表,然后在循环内使用
vals.append(np.random.rand(2,2))
转换为numpy数组,然后在循环后使用
mat=np.vstack(vals)
?在您的示例中,您甚至可以通过列表理解来实现这一点。预期的形状(6,2)与第二个解决方案类似。我希望在代码中避免使用if-else语句。有办法吗?
np.append
将垂直堆叠-但您首先必须花时间阅读它的文档
np.append
只是
np.concatenate
的一个粗略编写的前端,使您认为您正在执行类似列表append方法的操作。为什么要在
vstack
示例中避免if-else?如果您查看
[source]
中的
np.append
np.vstack
,您会发现它们在调用
np.concatenate
之前都有If-else`语句。之后进行
重塑
会有什么问题<与重复的
连接所需的复制相比,code>if
reformate
都便宜。不确定这里会发生什么:AA=array([[0.8336,0.7219,0.4219,0.5242,0.2185,0.5263,0.9378],[1.5199,1.3509,0.8133,1.0232,0.4385,0.7882,1.7773],[2.1065,2.185,1.352,1.5063,0.7637,1.4393,2.7533],[2.9781,2.749,2.1404,2.426,1.1021,2.5482,3.6495])np.append(np.empty((4,7)),AA,axis=0)变成形状(8,7)?用np.append(np.empty((0,7))替换np.append(np.empty))。empty使用“随机”数据,因此包含值(在我的例子中,它是前面的值,因此与“AA”的值相同)。如果您不希望这样做,也可以使用np.zero((0,7))(但是,当数组的高度为0时,它不应该有任何关系)