python系列教程215——列表解析与矩阵

朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow

声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值得阅读!想要学习AI技术的同学可以点击跳转到我的教学网站。PS:看不懂本篇文章的同学请先看前面的文章,循序渐进每天学一点就不会觉得难了!

使用Python编写矩阵(也被称为多维数组)的一个基本的方法就是使用嵌套的列表结构。例如,如下代码使用嵌套列表的列表定义了两个3×3的矩阵。

复制代码
>>>M = [[1,2,3],

...     [4,5,6],

...     [7,8,9]]




>>>N = [[2,2,2],

...     [3,3,3],

...     [4,4,4]]

我们能够只索引行,也可以索引行中的列来访问某个元素。

复制代码
>>>M[1]

[4,5,6]




>>>M[1][2]

6

列表解析也是处理矩阵的强大工具,它会自动为我们扫描行和列。虽然这种结构通过行来存储矩阵,但是我们能够简单地通过对行进行迭代,然后从所需要的列中提取出元素,或者就像下面一样通过在行内的位置进行迭代。

复制代码
>>>[row[1] for row in M]

[2,5,8]




>>>[M[row][1] for row in (0,1,2)]

[2,5,8]

下面提取了矩阵中对角线位置的元素。下面的表达式使用range来生成列表的偏移量,之后使用相同的行和列来进行索引,取出了M[0][0],之后是 M[1][1](这里我们假设矩阵有相同数目的行和列)。

复制代码
>>>[M[i][i] for i in range(len(M))]

[1,5,9]

最后,我们使用列表解析来混合多个矩阵。

复制代码
>>>[M[row][col] * N[row][col] for row in range(3) for col in range(3)]

[2,4,6,12,15,18,28,32,36]




>>>[[M[row][col] * N[row][col] for col in range(3)] for row in range(3)]

[[2,4,6],[12,15,18],[28,32,36]]

最后一个表达式等同于如下的基于语句的代码。

复制代码
>>>res = []

>>>for row in range(3):

...    tmp = []

...    for col in range(3):

...        tmp.append(M[row][col] * N[row][col])

...    res.append(tmp)

...

>>>res

[[2,4,6],[12,15,18],[28,32,36]]

与这些语句相比,列表解析只需要一行代码,而且可能对于大型矩阵来说,运行得更快。

相关推荐
数据智能老司机14 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机14 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机14 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i14 小时前
drf初步梳理
python·django
每日AI新事件14 小时前
python的异步函数
python
这里有鱼汤15 小时前
miniQMT下载历史行情数据太慢怎么办?一招提速10倍!
前端·python
databook1 天前
Manim实现脉冲闪烁特效
后端·python·动效
程序设计实验室1 天前
2025年了,在 Django 之外,Python Web 框架还能怎么选?
python
倔强青铜三1 天前
苦练Python第46天:文件写入与上下文管理器
人工智能·python·面试
用户2519162427111 天前
Python之语言特点
python