我有以下问题:
我有一个包含以下声明的列表:
As = [[0]*3]*3
然后我尝试用以下方法更改此“矩阵”的值:
for i in range(3):
for j in range(3):
As[i][j] = calculate(A, i, j)*((-1)**(i+j))
正如您可能已经猜到的,这用于计算 3x3 矩阵的逆矩阵。
函数计算返回以下值:
4.0
-2.0
-3.0
-4.0
-10.0
9.0
4.0
10.0
-21.0
但是,As 具有以下值:
[[4.0, -10.0, -21.0], [4.0, -10.0, -21.0], [4.0, -10.0, -21.0]]
,这是意外的。
我错过了什么?
最佳答案
当您构建这样的列表时 [[0]*3]*3
您正在创建对同一列表的 3 个引用,请改用列表理解:
[[0 for _ in xrange(3)] for _ in xrange(3)]
看看这里的推导式是如何修改 [0][0]
的:
>>> l1 = [[0]*3]*3
>>> l1[0][0] = 10
>>> l1
[[10, 0, 0], [10, 0, 0], [10, 0, 0]]
>>> l2 = [[0 for _ in xrange(3)] for _ in xrange(3)]
>>> l2[0][0] = 10
>>> l2
[[10, 0, 0], [0, 0, 0], [0, 0, 0]]
关于Python 非 numpy 矩阵问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39846646/