NumPy中random.randint调用reshape报int无属性错误原因
报错触发原因
核心问题是你没有给np.random.randint传入size参数时,函数的返回值类型和预期不符:
- 你参考的链式写法
np.arange(50).reshape(10,5)能正常运行,是因为np.arange(50)默认返回长度为50的一维numpy ndarray数组,数组对象自带reshape方法,只要变形前后元素总数一致就能正常调用。 - 你写的可正常运行的
tirage2=np.random.randint(0,2,size=(10,5)),是因为传入了size=(10,5)参数,函数直接返回形状为10行5列的二维ndarray数组。 - 报错的代码
tirage3=np.random.randint(0,2).reshape(5,10)里,np.random.randint(0,2)没有指定size参数,函数只会返回单个随机整数(值为0或1,类型是Python原生int),int类型对象不存在reshape方法,自然会抛出AttributeError: 'int' object has no attribute 'reshape'。
正确使用方法
根据需求选任意一种写法即可:
- 直接指定输出形状,是最简洁的写法:
tirage3 = np.random.randint(0, 2, size=(5, 10))
- 如果你确实要链式调用
reshape,需要先生成对应总元素数的一维数组,再做形状转换。5行10列的数组总共有50个元素,所以先生成长度为50的一维随机整数数组再变形:
tirage3 = np.random.randint(0, 2, size=50).reshape(5, 10)
注意:调用reshape时必须保证变形前后的元素总数完全匹配,比如长度50的一维数组只能转换成(5,10)、(10,5)、(2,25)这类总元素数乘积为50的形状,否则会报形状不匹配的错误。
内容的提问来源于stack exchange,提问作者fransua
相关产品推荐
相关产品推荐

