python二维矩阵_Python 二维矩阵 行列转置的多种实现方法

本文介绍了在处理MySQL数据时遇到的二维矩阵转置问题,并提供了五种解决方案,包括基础的for循环、列表推导式、zip(*)函数、numpy的T转置以及pandas的T转置。在一般情况下,推荐使用zip(*)函数,因其高效快捷。对于需要处理大量矩阵数据的情况,numpy和pandas是更好的选择,但在性能和便捷性之间需要权衡。
摘要由CSDN通过智能技术生成

最近在读写 MySQL 数据的过程中,碰到了需要处理 二维矩阵数据 行列转置 的问题,比如将:

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

# 注意:矩阵中每个子序列的长度是相同的

转化成:

[[1, 5, 9],

[2, 6, 10],

[3, 7, 11],

[4, 8, 12]]

# 行列转置之后的结果

在研究了一番之后,总结了以下这些方法,做个记录。

1. 最基础的 for 循环

def transpose_2d(data):

transposed = []

for i in range(len(data[0])):

new_row = []

for row in data:

new_row.append(row[i])

transposed.append(new_row)

return transposed

data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

print(transpose_2d(data))

# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

# [Finished in 0.1s]

2. 使用列表推导式 List Comprehension

这个其实是第一种方法的高级简化写法。

def transpose_2d(data):

transposed = [[row[i] for row in data] for i in range(len(data[0]))]

return transposed

data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

print(transpose_2d(data))

# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

# [Finished in 0.1s]

3. 使用 zip(*iterable) 函数(推荐)

一种高效的写法,因为 list, map, zip 都是 Python 内建的函数 (Built-ins),所以速度也是相当的快。

def transpose_2d(data):

# transposed = list(zip(*data))

# [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

# 注意 zip 本身返回的数据类型为 tuple 元组

# 其中符号 * 号可以对元素进行解压或展开

transposed = list(map(list, zip(*data)))

return transposed

data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

print(transpose_2d(data))

# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

# [Finished in 0.1s]

4. 使用 numpy 的 T 转置

from numpy import transpose

data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

transposed = transpose(data).tolist()

print(transposed)

# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

# [Finished in 0.3s]

# 速度中规中矩,毕竟 numpy 用来处理数学更好

5. 使用 pandas 的 T 转置

from pandas import DataFrame

data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

transposed = DataFrame(data).T.values.tolist()

print(transposed)

# [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

# [Finished in 0.7s]

# 可能因为 pandas 本身调用了其他的库,这里明显感觉偏慢,杀鸡用牛刀了

总结

综上,在一般情况下,我们直接使用 Python 内置的 zip(*) 函数就可以快速实现二维矩阵转置了,当然使用其他一些专用的库也是可以的,在性能和便捷程度上做好取舍就可以了,希望对需要的朋友有帮助,感谢支持~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>