如何仅使用NumPy数组实现从空数组追加行构建二维数组?
用NumPy实现动态追加构建二维数组
NumPy数组本身是固定尺寸的,不像Python列表那样能直接动态扩容,但可以通过以下几种方式实现类似列表append的效果:
方法1:使用np.vstack逐行追加
先初始化一个指定列数的空数组,再通过vstack合并新行:
import numpy as np # 初始化形状为(0, 3)的空数组(3列,0行),指定数据类型为int arr = np.empty((0, 3), dtype=int) # 追加第一行 arr = np.vstack([arr, [1, 2, 3]]) # 追加第二行 arr = np.vstack([arr, [4, 5, 6]])
方法2:使用np.concatenate合并数组
和vstack原理类似,需要保证维度对齐:
import numpy as np # 初始化空数组并调整为(0, 3)的形状 arr = np.array([], dtype=int).reshape(0, 3) # 追加第一行(注意要把列表转成二维数组) arr = np.concatenate([arr, np.array([[1, 2, 3]])], axis=0) # 追加第二行 arr = np.concatenate([arr, np.array([[4, 5, 6]])], axis=0)
更高效的方式:提前初始化数组
如果能提前知道最终数组的尺寸,直接初始化后赋值是最优方案(避免频繁内存复制):
import numpy as np # 直接创建2行3列的空数组 arr = np.zeros((2, 3), dtype=int) # 给每行赋值 arr[0] = [1, 2, 3] arr[1] = [4, 5, 6]
注意:NumPy的动态追加操作本质上是创建新数组并复制原有数据,数据量较大时效率远低于提前初始化,建议优先采用第三种方法。
内容的提问来源于stack exchange,提问作者Harry van Langen
相关产品推荐
相关产品推荐

