【题目描述】
Write a Python function that computes the transpose of a given matrix.
要求实现一个函数以转置给定的矩阵。
【思路解法】
方法一:平平无奇用循环
from typing import List, Union
# 3.8及以前版本,类型提示的语法是通过typing模块实现的,
#例如你应该使用List而不是直接使用list。从Python 3.9开始,你可以直接对内置的list进行类型提示。
def transpose_matrix(a: List[List[Union[int, float]]]) -> List[List[Union[int, float]]]:
b = []
for i in range(len(a[0])):
vals = []
for j in a:
vals.append(j[i])
b.append(vals)
return b
print(transpose_matrix([[1, 2], [3, 4], [5, 6]]))
第一个循环先确定原矩阵中的列,第二个循环找到原矩阵中的每一行,通过一个中间矩阵存储原矩阵中每一列的元素,并将其以行的形式存储到新矩阵中。
方法二:numpy就是好用
from typing import List, Union
def transpose_matrix(a: List[List[Union[int, float]]]) -> List[List[Union[int, float]]]:
import numpy as np
b = np.transpose(a)
return b
- numpy.transpose的介绍:
numpy.transpose(a, axes=None)
numpy.transpose 是NumPy库中一个用于数组转置的函数。它能够交换数组的维度,适用于多维数组(不仅限于二维矩阵)。
参数- a:
要进行转置的数组(多维数组、矩阵等)。 - axes:
可选参数,用于指定转置后的轴顺序。如果没有指定,默认将数组的所有维度反转。
例如,axes=(1, 0, 2) 表示第0维和第1维交换位置,第2维保持不变。
如果数组是二维的,axes=(1, 0) 就是将其行和列交换,即通常理解的矩阵转置。
# 三维矩阵的转置
import numpy as np
array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
transposed_3d = np.transpose(array_3d, axes=(1, 0, 2))
print(transposed_3d)
方法三:使用 Python 内置的 zip 函数
def transpose_matrix(a: list[list[int|float]]) -> list[list[int|float]]:
return [list(i) for i in zip(*a)]
- zip 是Python内置的一个函数,它用于将多个可迭代对象(如列表、元组等)的元素打包成一个个元组。可以理解为将多个序列“拉链”式地组合在一起。使用 zip 可以非常方便地对多个序列进行并行处理。
zip(*iterables)
-
*iterables: 任意数量的可迭代对象。
zip 用于将多个可迭代对象打包成元组。
它常用于并行处理多个序列、生成字典、或矩阵的转置操作。
当输入序列长度不一致时,zip 会以最短的序列为准,舍去多余的元素。 -
zip 也可以用于解压操作,通过 * 运算符实现。
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
numbers, letters = zip(*pairs)
print(numbers) # 输出: (1, 2, 3)
print(letters) # 输出: ('a', 'b', 'c')