Python 非 numpy 矩阵问题

标签 python list matrix

我有以下问题:

我有一个包含以下声明的列表:

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/

相关文章:

python - 如何从 numpy 矩阵中删除 nan 和 inf 值?

c# - 如何旋转 4x4 矩阵 (C#/XNA)

python - Flask-SQLAlchemy 左外连接过滤查询

python - Python中递归遍历类别树

list - CSS 列中的文本溢出

python - 为什么 remove() 实际上不删除 Python 列表中重复项的最后一个实例

java - 对 List<Map<String, String>> 进行排序

python - 将除法替换为零 numpy

python - 在子进程中重定向ffmpeg的输出

python - AUTOINCREMENT 列字段要求输入值