【Deep-ML】No.2 Transpose Matrix (esay)

【题目描述】

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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值