使用不带numpy的类两次转置矩阵



我需要实现一个方法transpose((,该方法返回一个已转置的新矩阵。它还必须打印出该矩阵的字符串。它在使用matrix.transpose((时起作用,但在使用mattric.transpose(.transpose(时不起作用,因为transposite((返回一个字符串。我不能使用numpy或向方法添加更多输入。我该怎么做?

from copy import deepcopy

class Matrix:
def __init__(self, rows):
self.rows = rows[:]
def transpose(self):
copy = deepcopy(self.rows)
transposed = [[copy[j][i] for j in range(len(copy))] for i in range(len(copy[0]))]
matrix = ''
for element in transposed:
for i in element:
matrix += '%2d' % ((i))
matrix += ' '
matrix = matrix[:-1]
matrix += 'n'

return matrix
a = Matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

您可以在transpose中创建一个新的Matrix对象,并在打印其内容后返回该对象。为了方便起见,我将您的打印代码移到了将矩阵转换为字符串的方法中(请注意,名为__repr__的方法将由打印隐式调用(。代码:

from copy import deepcopy
class Matrix:
def __init__(self, rows):
self.rows = rows[:]
def transpose(self):
copy = deepcopy(self.rows)
transposed = [[copy[j][i] for j in range(len(copy))] for i in range(len(copy[0]))]
transposed_matrix = Matrix(transposed)
print(transposed_matrix)
return transposed_matrix
def __repr__(self):
matrix = ''
for element in self.rows:
for i in element:
matrix += '%2d' % ((i))
matrix += ' '
matrix = matrix[:-1]
matrix += 'n'
return matrix

其他改进:

  • transpose中,可以将矩阵转置更改为transposed = list(map(list, zip(*self.rows)))
  • 使用格式字符串而不是'%2d' % ((i))->f'{i:2}'
  • join对格式化矩阵非常有帮助:return 'n'.join(' '.join(f'{i:2}' for i in row) for row in self.rows)

现在完整的代码看起来像这个

class Matrix:
def __init__(self, rows):
self.rows = rows[:]
def transpose(self):
transposed = list(map(list, zip(*self.rows)))
transposed_matrix = Matrix(transposed)
print(transposed_matrix)
return transposed_matrix
def __repr__(self):
return 'n'.join(' '.join(f'{i:2}' for i in row) for row in self.rows)

最新更新