如何在NumPy中追加数组而不扁平化,生成预期的二维数组?
在NumPy中追加数组避免扁平化的解决方案
你遇到的问题核心在于:参与拼接的数组都是一维的,维度不匹配导致无法直接得到二维结果。
错误原因分析
- 初始的
h是一维空数组,追加一维数组g后,h仍为一维数组(形状(2,))。 - 当使用
np.append(h, i, axis=0)时,两个一维数组会被沿0轴拼接成更长的一维数组(形状(4,)),而非二维数组。 - 使用
axis=1报错是因为一维数组只有0轴,不存在1轴,触发AxisError。
正确解决方案
要得到[[2,4],[6,9]]这样的二维数组,需要确保参与拼接的数组是二维形态,再沿0轴拼接。以下是几种可行方法:
方法1:先将一维数组升维,再追加
import numpy as np # 初始化空的二维数组(形状为(0,2),表示0行,每行2个元素) h = np.empty((0, 2)) g = np.array([2,4]) i = np.array([6,9]) # 将一维数组升为二维(形状变为(1,2)),再沿0轴追加 h = np.append(h, g.reshape(1, 2), axis=0) h = np.append(h, i.reshape(1, 2), axis=0) print(h) # 输出结果: # [[2. 4.] # [6. 9.]]
方法2:使用np.vstack直接堆叠
np.vstack专门用于纵向堆叠数组,会自动处理维度匹配:
import numpy as np g = np.array([2,4]) i = np.array([6,9]) h = np.vstack([g, i]) print(h) # 输出结果: # [[2 4] # [6 9]]
方法3:先收集到列表再转数组
如果不需要逐步追加,直接用列表收集一维数组再转换为NumPy二维数组更简单:
import numpy as np g = np.array([2,4]) i = np.array([6,9]) h_list = [g, i] h = np.array(h_list) print(h) # 输出结果: # [[2 4] # [6 9]]
内容的提问来源于stack exchange,提问作者Majoris
相关产品推荐
相关产品推荐

