PEP 465添加@ infix运算符进行矩阵乘法。然而,这些列表目前尚未实现。因此,根据文档的指示,我试图实现我自己的版本__matmul__
。执行infix @列表
这是我第一次尝试。
class Matrices(list):
def __matmul__(self,matrix):
tempmat = [[0 for row in range(len(self))] for col in range(len(matrix))]
for i in range(len(self)):
for j in range(len(matrix[0])):
for k in range(len(matrix)):
tempmat[i][j] += self[i][k] * matrix[k][j]
return tempmat
a = Matrices()
a.append([[1,2],[3,4]])
b = Matrices()
b.append([[5,6],[7,8]])
print([email protected])
但是我得到一个错误,
Traceback (most recent call last):
File "test.py", line 14, in <module>
print([email protected])
File "test.py", line 7, in __matmul__
tempmat[i][j] += self[i][k] * matrix[k][j]
TypeError: can't multiply sequence by non-int of type 'list'
我该如何解决这个问题?也就是说,我如何在Python中实现@
字符的列表?
只是在旁边 - 如果你想实施matmul,你应该使用Strassen。 – erip
@erip我只是想了解python3.5中'@'的用法。无论如何,谢谢你。我会尽力去学习。谢谢:) –
了解。 Strassen是替代'O(n^3)'的更快的替代品 - 我认为它是'O(n^2.8)' – erip