Python数组清理问题

2024-04-27 03:56:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个矩阵式的数组,它(假设)看起来像这样:

mat = [[0,2,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
imat = mat
for i in xrange(4):
    for j in xrange(4):
        imat[j][i] = mat[i][j]
for i in xrange(4):
    for j in xrange(4):
        imat[j][i] = mat[i][j]

代码基本上将行/列从“mat”切换到“imat”。你知道吗

结果是: mat: [[0, 2, 0, 0], [2, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] imat: [[0, 2, 0, 0], [2, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

有人能告诉我为什么数组项会这样复制吗?
此外,如果有一个更有效的方法来做这项工作,这也将不胜感激。你知道吗


Tags: 方法代码infor数组matxrange矩阵式
2条回答

Also, if there is a more efficient way to do this operation, that would also be appreciated.

是的,它被称为矩阵transpose操作,在Python中使用内置函数^{}*-unpacking

imat = zip(*mat)

至于为什么你当前的代码不起作用,@scar López说得对,做imat = mat不会创建矩阵的新副本。你知道吗

问题在于:

imat = mat

相反,您应该这样做,在开始时分配一个新的4x4矩阵:

imat = [[0]*4 for _ in xrange(4)]

所发生的事情是,您没有正确初始化imat,您只为mat分配了一个引用,因此这两个对象是一个相同的对象,因此没有执行任何修改。另外,一种更简单的矩阵转置方法是:

imat = [list(m) for m in zip(*mat)]

相关问题 更多 >