如何定义空2D numpy数组 使其逐次拼接后结果与示例一致
解决方案
你需要定义一个行长度为0、列数和待拼接数组一致、数据类型匹配的二维空数组,对应写法如下:
import numpy as np # 初始空数组定义 e = np.empty((0, 2), dtype=int)
原理解释
- 你的拼接操作是沿
axis=0(行维度)合并二维数组,所有参与拼接的数组必须维度一致,且除了拼接轴外的其他维度长度完全相等:待拼接的a是(2,2)、b是(1,2),因此初始空数组需要是二维结构,列数固定为2,行长度为0才能兼容后续拼接。注意不要直接用e = np.array([])定义,这是一维数组,维度和待拼接的二维数组不匹配会直接报错。 - 指定
dtype=int是为了和后续整数数组的类型匹配,避免默认生成float类型的数组,导致输出结果带小数点和预期不符。
完整可运行代码验证
import numpy as np e = np.empty((0, 2), dtype=int) a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) e = np.concatenate((e, a), axis=0) e = np.concatenate((e, b), axis=0) print(e)
运行输出完全符合预期:
[[1 2] [3 4] [5 6]]
循环拼接场景的补充建议
如果是循环中大量拼接数组,反复调用np.concatenate会产生很多中间副本、运行效率较低,更推荐的写法是先把所有待拼接的数组存入普通Python列表,最后一次性拼接:
arr_list = [] # 循环逻辑示例 for arr in [a, b]: arr_list.append(arr) e = np.concatenate(arr_list, axis=0)
内容的提问来源于stack exchange,提问作者Paul Jurczak
相关产品推荐
相关产品推荐

