首页 > 解决方案 > Numpy在for循环中追加二维数组

问题描述

我想垂直附加在 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 语句?

标签: pythonnumpyappendnumpy-ndarray

解决方案


使用 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 数组


推荐阅读