NumPy中向空数组添加行的报错问题及替代方案咨询
问题解答
关于你提出的初始化方案可行性
用np.zeros(3)初始化AA后再移除第一行是可行的,但确实不够简洁,而且如果循环次数较多,频繁调用vstack会因为重复内存分配导致效率偏低。
更优的解决方案
1. 先收集到Python列表,再一次性合并
这是最常用也最高效的方式,因为Python列表的append操作开销远小于NumPy数组的堆叠:
import numpy as np arr_list = [] for i in range(3): BB = np.random.rand(3) arr_list.append(BB) CC = np.vstack(arr_list)
2. 预分配数组直接填充(推荐)
如果提前知道最终数组的形状(比如这里是3行3列),直接预分配内存再逐行填充,效率最高:
import numpy as np # 预分配3行3列的数组 CC = np.zeros((3, 3)) for i in range(3): CC[i] = np.random.rand(3)
3. 正确初始化二维空数组
你原代码报错的核心原因是:np.array([])是一维空数组(形状(0,)),而BB是一维数组(形状(3,)),vstack要求除堆叠轴外的维度完全匹配。只需把AA初始化为二维空数组,就能直接循环堆叠:
import numpy as np # 初始化形状为(0, 3)的二维空数组 AA = np.empty((0, 3)) for i in range(3): BB = np.random.rand(3) AA = np.vstack((AA, BB)) CC = AA
内容的提问来源于stack exchange,提问作者diedro
相关产品推荐
相关产品推荐

