生成mxn随机矩阵时遇int()参数错误的原因及解决方法
解决int()参数为元组的错误:随机矩阵生成代码问题分析
你碰到的这个错误根源很明确——你的类初始化方法里的赋值语句写错了,导致self.mSize和self.nSize被意外赋值成了元组,而非你期望的单个数值。
问题出在哪?
看你__init__方法里的这一行:
self.mSize=mSize, self.nSize=nSize
在Python中,逗号是用来创建元组的语法。这行代码会被解析为:
self.mSize = (mSize, self.nSize=nSize)
也就是说,你把一个包含两个元素的元组赋值给了self.mSize,而self.nSize根本没有被正确初始化(它被打包进了self.mSize的元组里)。当你后续执行int(param.mSize)时,自然会报错——因为你试图把一个元组转换成整数,这显然不符合int()的参数要求。
怎么修复?
只需要把初始化方法里的赋值语句改成规范的形式即可,有两种常见写法:
- 分成两行赋值(推荐,可读性更高):
def __init__(self, mSize, nSize ): self.mSize = mSize self.nSize = nSize
- 用分号分隔同一条语句(不推荐,但可以正常工作):
def __init__(self, mSize, nSize ): self.mSize = mSize; self.nSize = nSize
另外,还有一个小细节可以优化:你的RMatrix方法用了param作为第一个参数,虽然加了断言验证类型,但按照Python类实例方法的惯例,应该用self作为第一个参数,这样代码更符合规范,可读性也更好。修复后的完整代码如下:
import numpy as np class MP: def __init__(self, mSize, nSize ): self.mSize = mSize self.nSize = nSize def RMatrix(self): m = int(self.mSize) n = int(self.nSize) A = np.random.rand(m,n) return np.matrix(A)
这样修改后,self.mSize和self.nSize就会是你传入的单个数值(或可转换为整数的类型),不会再出现元组类型的错误了。
内容的提问来源于stack exchange,提问作者CuriousPython
相关产品推荐
相关产品推荐

