我有一个矩阵式的数组,它(假设)看起来像这样:
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]]
有人能告诉我为什么数组项会这样复制吗?
此外,如果有一个更有效的方法来做这项工作,这也将不胜感激。你知道吗
是的,它被称为矩阵transpose操作,在Python中使用内置函数^{} 和*-unpacking:
至于为什么你当前的代码不起作用,@scar López说得对,做
imat = mat
不会创建矩阵的新副本。你知道吗问题在于:
相反,您应该这样做,在开始时分配一个新的4x4矩阵:
所发生的事情是,您没有正确初始化
imat
,您只为mat
分配了一个引用,因此这两个对象是一个相同的对象,因此没有执行任何修改。另外,一种更简单的矩阵转置方法是:相关问题 更多 >
编程相关推荐