Python使用Numpy获取矩阵指定位置值及代码运行异常解决
问题根源
你代码的核心问题是每次调用define_matrix()方法都会生成一个全新的零矩阵,修改和查询操作没有基于同一个矩阵实例:
set方法中修改的是临时生成的局部变量matrix1,修改结果没有作为实例属性保存,你调用a.set(80,1,3)时也没有接收方法返回的修改后矩阵get方法查询时再次调用define_matrix()生成了新的全零矩阵,自然获取不到之前设置的值,返回结果始终为0- 额外问题:
__str__方法要求返回字符串类型,你直接返回numpy数组会触发类型报错
修正后代码
import numpy as np class Matrix: def __init__(self, m, n): self.row = m self.column = n # 初始化时就把矩阵存为实例属性,全局共用这一个 self.matrix = np.zeros((self.row, self.column), dtype=int) def __str__(self): # 转为字符串返回,符合__str__方法要求 return str(self.matrix) def get(self, a, b): try: if not a in range(self.row+1): print('El valor deseado no pertenece a la matriz.') elif not b in range(self.column+1): print('El valor deseado no pertenece a la matriz.') else: print( 'El valor ubicado en la fila {} ' 'y en la columna {} es: {}' .format(a, b, self.matrix[a - 1][b - 1])) except: print('Ingrese datos válidos') def set(self, value, a, b): if not a in range(self.row+1): print('El valor deseado no pertenece a la matriz.') elif not b in range(self.column+1): print('El valor deseado no pertenece a la matriz.') else: # 直接修改实例存储的矩阵属性,修改结果会被保留 self.matrix[a-1][b-1] = value return self.matrix a = Matrix(4, 4) a.set(80, 1, 3) a.get(1, 3)
运行结果
执行后会输出预期结果:El valor ubicado en la fila 1 y en la columna 3 es: 80
内容的提问来源于stack exchange,提问作者ronny
相关产品推荐
相关产品推荐

