帮助我使用没有
numpy
的属性实现矩阵元素的访问和更改。我是初学者)
我想做什么
class Matrix:
def __init__(self, matrix=[[0] * 3 for i in range(3)], n = 0, m = 0, element = 0):
self.matrix = matrix
self.n = len(matrix)
self.m = len(matrix[0])
self.element = element
@property
def element(self, i, j):
return self.__matrix[i][j]
@element.setter
def element(self, i, j, new_value):
print("{}".format(new_value))
self.__matrix[i][j] = new_value
matrix2 = Matrix([[1,5],[3,3]])
print(matrix2.element(1,1).matrix)
matrix2.element(2, 1) = 3
print(matrix2.element)
结果出错了
首先让我们以简单的方式做到这一点,使用方法:
class Matrix:
def __init__(self, matrix=[[0] * 3 for i in range(3)], n = 0, m = 0):
self.matrix = matrix
self.n = len(matrix)
self.m = len(matrix[0])
def getitem(self, i, j):
return self.matrix[i][j]
def setitem(self, i, j, value):
self.matrix[i][j] = value
matrix2 = Matrix([[1,5],[3,3]])
print(matrix2.getitem(1,1))
matrix2.setitem(1, 1, 5)
要使用
getitem
,我们需要传递索引。要使用setitem
,我们需要同时传递索引和新值。
Python 提供具有内置索引功能的相同方法
__getitem__
和 __setitem__
。通过使用 __getitem__
和 __setitem__
而不是 getitem()
和 setitem()
,我们可以利用 Python 的内置索引功能来访问和修改 Matrix 对象的元素。
因此:
class Matrix:
def __init__(self, matrix=[[0] * 3 for i in range(3)], n = 0, m = 0):
self.matrix = matrix
self.n = len(matrix)
self.m = len(matrix[0])
def __getitem__(self, index):
i, j = index
return self.matrix[i][j]
def __setitem__(self, index, value):
i, j = index
self.matrix[i][j] = value
print(self.matrix)
def __str__(self):
return str(self.matrix)
matrix2 = Matrix([[1,5],[3,3]])
print(matrix2[1, 1])
matrix2[1, 1] =5
print(matrix2)