Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在脚本中转置矩阵时出现索引错误_Python_List_Matrix - Fatal编程技术网

Python 在脚本中转置矩阵时出现索引错误

Python 在脚本中转置矩阵时出现索引错误,python,list,matrix,Python,List,Matrix,我有一个转置平方矩阵的程序: matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]] matrix _trans = [] for i in range (len (matrix)):      for j in range (len (matrix)):          matrix_trans [j] [i] = matrix [i] [j] 错误: 索引器错误:列表索引超出范围 为什么会在此处产生此错误?问题在于matrix\u trans只是一个空列

我有一个转置平方矩阵的程序:

matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
matrix _trans = []

for i in range (len (matrix)):
     for j in range (len (matrix)):
         matrix_trans [j] [i] = matrix [i] [j]
错误:

索引器错误:列表索引超出范围

为什么会在此处产生此错误?

问题在于
matrix\u trans
只是一个空列表,这就是为什么您无法访问任何indx,请创建
matrix
的副本:

matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
matrix_trans = [x[:] for x in matrix]

这是因为
matrix\u trans[j][i]
,在第一次迭代中
j
i
都将为零,
matrix\u trans
是一个空列表,因此
matrix\u trans[0]
将引发索引错误,您应该在strat中有第一个矩阵的维度的副本,如下所示:

from copy import deepcopy
matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
matrix_trans = deepcopy(matrix)

for i in range(len(matrix)):
     for j in range(len(matrix)):
         matrix_trans[j][i] = matrix[i][j]
list(zip(*matrix))
结果:

In [41]: matrix_trans
Out[41]: [[1, 3, 6], [2, 6, 8], [4, 9, 2]]

In [42]: matrix
Out[42]: [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
有关
复制
模块的更多信息,请阅读

另外,请注意,对于此操作,您可以使用Python
zip
。像这样:

from copy import deepcopy
matrix = [[1, 2, 4], [3, 6, 9], [6, 8, 2]]
matrix_trans = deepcopy(matrix)

for i in range(len(matrix)):
     for j in range(len(matrix)):
         matrix_trans[j][i] = matrix[i][j]
list(zip(*matrix))