Python NumPy reshape传入shape元组报错的解决方法
报错原因
NumPy的reshape()方法要求传入的形状参数要么是多个独立的整数,要么是一个完整的形状元组。
你代码里k = I1.shape拿到的k本身是元组类型(7,2),写I1.reshape(1,k)时,相当于给方法传了两个参数:整数1、元组(7,2),方法无法将第二个参数(元组)识别为单个整数维度值,就会抛出'tuple' object cannot be interpreted as an integer的错误。
正确实现方案
最贴合你原有编码思路的写法是用元组解包,把新维度和原形状元组拼接成完整的目标形状元组再传入:
import numpy as np I1= np.array([[0, 1], [0, 2], [1, 3], [2, 3], [2, 5], [3, 6], [5, 6]]) k = I1.shape # *k会把元组(7,2)解包成两个独立值,和前面的1拼成完整元组(1,7,2) I1 = I1.reshape((1, *k))
运行后I1.shape就会是你需要的(1,7,2)。
除此之外还有两种常用的等价写法,可以按需选用:
- 自动推断维度:如果确定只在最外层加一个长度为1的维度,可以用
-1让NumPy自动计算剩余维度长度,写法更简洁,但多维数组场景下不会保留原有内部维度结构,通用性稍差:
I1 = I1.reshape(1, -1)
- 新增轴专用写法:如果需求就是给数组新增一个长度为1的维度,用切片加
np.newaxis语义更清晰:
# 在第0轴位置插入新维度,结果形状直接为(1,7,2) I1 = I1[np.newaxis, :]
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

