Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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
Arrays 如何在Python 3中转置数组?_Arrays_Python 3.x_Transpose - Fatal编程技术网

Arrays 如何在Python 3中转置数组?

Arrays 如何在Python 3中转置数组?,arrays,python-3.x,transpose,Arrays,Python 3.x,Transpose,我一直在浏览论坛,还没有找到适合我的情况的答案。我需要能够获取一个n乘n的数组,并在Python-3中转置它。给出的示例是,我将此列表输入到函数中: [[4,2,1],“a”,“a”,“a”],[-1,-2,-3]],需要将其转置为: [4,'a',-1],[2,'a',-2],[1,'a',-3]]所以基本上是垂直阅读,而不是水平阅读 我不能使用像zip或numpy这样的东西,我必须创建自己的函数 两个晚上以来,我一直在为这件事绞尽脑汁,真是头疼死了。如果有人能帮助我,然后给我一个解释,我会很

我一直在浏览论坛,还没有找到适合我的情况的答案。我需要能够获取一个n乘n的数组,并在Python-3中转置它。给出的示例是,我将此列表输入到函数中:

[[4,2,1],“a”,“a”,“a”],[-1,-2,-3]],需要将其转置为:

[4,'a',-1],[2,'a',-2],[1,'a',-3]]所以基本上是垂直阅读,而不是水平阅读

我不能使用像zip或numpy这样的东西,我必须创建自己的函数

两个晚上以来,我一直在为这件事绞尽脑汁,真是头疼死了。如果有人能帮助我,然后给我一个解释,我会很感激的

编辑:

为了便于参考,我应该添加参数变量M。我们应该编写的函数是trans(M):

一行:

def trans(M):
    return [[M[j][i] for j in range(len(M))] for i in range(len(M[0]))]
结果:

>>> M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> trans(M)
[[1, 4, 7], [2, 5, 8], [3, 6, 9]
# or for a non-square matrix:
>>> N = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
>>> trans(N)
[[1, 4, 7, 10], [2, 5, 8, 11], [3, 6, 9, 12]]

附加说明:如果查阅教程,其中一个示例实际上是矩阵数组。

一种适用于不规则行长度矩阵的变体:

m=[[3, 2, 1],
   [0, 1],
   [2, 1, 0]]

m_T = [ [row[c] for row in m if c < len(row)] for c in range(0, max([len(row) for row in m])) ]
m=[[3,2,1],
[0, 1],
[2, 1, 0]]
m_T=[[c行]表示m行,如果c
这是一个适用于方阵的就地解决方案:

def trans(M):
  n = len(M)
  for i in range(n - 1):
    for j in range(i + 1, n):
      M[i][j], M[j][i] = M[j][i], M[i][j]
用法示例:

def print_matrix(M):
  for row in M:
    for ele in row:
      print(ele, end='\t')
    print()
  
M = [[4, 2, 1], ["a", "a", "a"], [-1, -2, -3]]
print('Original Matrix:')
print_matrix(M)
trans(M)
print('Transposed Matrix:')
print_matrix(M)
Original Matrix:
4   2   1
a   a   a
-1  -2  -3
Transposed Matrix:
4   a   -1
2   a   -2
1   a   -3
输出:

def print_matrix(M):
  for row in M:
    for ele in row:
      print(ele, end='\t')
    print()
  
M = [[4, 2, 1], ["a", "a", "a"], [-1, -2, -3]]
print('Original Matrix:')
print_matrix(M)
trans(M)
print('Transposed Matrix:')
print_matrix(M)
Original Matrix:
4   2   1
a   a   a
-1  -2  -3
Transposed Matrix:
4   a   -1
2   a   -2
1   a   -3

提示:维基百科说,“A_的
i
th行,
j
th列元素被转置后是A的
j
th行,
i
th列元素。”使用numpy库。类似于这个np.array([5,4])[np.newaxis]并打印结果print a.t感谢您和@Morten Zilmer。但我不太明白为什么它会起作用。“for i in range(len(M[0]))部分是如何工作的?假设所有行(内部列表)具有相同的长度,即
len(M[0])
给出的列数迭代各列,并根据M的每列中的所有行元素在转置矩阵中创建行。@uncleschaos-这称为列表理解(教程中的解释和示例应该说明它是如何工作的)@mata非常感谢,你为我省下了又一天的麻烦!