Python numpy拼接3个(1,9,2)多维数组报错如何解决
错误产生原因
np.append的函数定义为numpy.append(arr, values, axis=None),仅支持传入2个数组作为位置参数完成拼接:
- 第一个位置参数是基础数组
arr - 第二个位置参数是待追加的数组
values - 第三个位置参数本身就是
axis参数的固定传参位
代码中把I1、I2、I3三个数组都作为位置参数传入时,第三个参数I3会被识别为传给axis的位置值,后面又显式传入axis=0关键字参数,等于给axis参数重复传值,因此抛出类型错误。
就算去掉显式的axis=0参数,直接调用np.append(I1,I2,I3)也无法实现三个数组的拼接,因为I3会被当成axis的输入值,出现参数类型不匹配的报错。
正确实现方法
要得到形状为(3,9,2)的拼接结果,有两种常用实现方案:
- 方案1:使用
np.concatenate(推荐,性能最优,原生支持多数组拼接)np.concatenate专门用于沿现有轴拼接多个数组,直接将所有待拼接数组放入列表/元组作为第一个参数传入即可,完整代码如下:
import numpy as np I1 = np.array([[[0, 2], [2, 3], [2, 5], [3, 4], [3, 6], [4, 1], [4, 7], [5, 6], [6, 7]]]) I2 = np.array([[[1, 1], [2, 3], [2, 5], [3, 4], [3, 6], [4, 1], [4, 7], [5, 6], [6, 7]]]) I3 = np.array([[[2, 2], [2, 3], [2, 5], [3, 4], [3, 6], [4, 1], [4, 7], [5, 6], [6, 7]]]) I = np.concatenate([I1, I2, I3], axis=0)
运行后打印I.shape可验证输出为(3, 9, 2),完全符合预期。
- 方案2:嵌套调用
np.append(不推荐,多数组拼接时写法冗余,性能差)
如果一定要用np.append,需要嵌套调用,每次仅传入2个数组完成拼接,再把拼接结果和下一个数组继续拼接,核心代码如下:
I = np.append(np.append(I1, I2, axis=0), I3, axis=0)
该写法运行后也能得到形状正确的结果,但拼接数组越多嵌套层级越深,可读性和执行效率都低于np.concatenate方案。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

