列表解析和矩阵
来源:互联网 发布:linux安装cuda8.0 编辑:程序博客网 时间:2024/06/17 12:29
使用python编写矩阵(也被称为多维数组)的一个基本的方法就是使用嵌套的列表结构。例如,如下代码使用嵌套列表的列表定义了3*3的矩阵。
如果使用一次索引,会得到一整行(实际上,也就是嵌套的子列表),如果使用两次索引,你将会得到某一行里的其中一项。
#!/usr/bin/env python# coding=utf-8import numpy as npmatrix=[[1, 2, 3], [4, 5, 6], [7, 8, 9] ]print matrixprint matrix[1]print matrix[1][1]
使用这样的结构,我们总是能够索引行,以及索引行中的列,使用通常的索引操作。
列表解析也是处理这样结构的强大的工具,因为它将会自动为我们扫描行和列。例如,尽管这种结构通过行存储了矩阵,为了选择第二列,我们能够简单地通过对行进行迭代,之后从所需要的列中提取出元素,或者就像下面一样通过在行内的位置进行迭代。
M=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]print(M)print(M[1][2])ret=[row[1] for row in M]print(ret)ret=[M[row][1] for row in (0, 1, 2)]print(ret)
M=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]ret=[M[i][i] for i in range(len(M))]print(ret)
M=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]N=[[2, 2, 2], [3, 3, 3], [4, 4, 4]]ret=[M[row][col] * M[row][col] for row in range(3) for col in range(3) ]print(ret)
M=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]N=[[2, 2, 2], [3, 3, 3], [4, 4, 4]]ret=[ [M[row][col] * M[row][col] for col in range(3)] for row in range(3)]print(ret)
这个表达式时有效的,因为row迭代是外层的循环。对于每个row,它运行嵌套的列的迭代来创建矩阵每一行的结果。它等同于如下的基于语句的代码。
res=[]for row in range(3): tmp=[] for col in range(3): tmp.append(M[row][col] * M[row][col]) res.append(tmp)print(ret)
与这些语句相比,列表解析这个版本只需要一行代码,而且可能对于大型矩阵来说,运行相当快。
性能优势:基于对运行在当前python下的测试,map调用要比等效的for循环要快两倍,而列表解析往往比map调用要稍快一些。速度上的差距是来自于底层实现上,map和列表解析是在解释器中以C语言的速度来运行的,比python的for循环代码在PVM中步进运行要快得多。
0 0
- 列表解析和矩阵
- 矩阵和散列表
- 矩阵、数据框和列表
- 列表、列表解析、过滤器filter和map
- python 列表和列表解析以及排序
- R语言基础-矩阵和列表
- Python列表解析和生成器
- python:迭代器和列表解析
- 三元表达式和列表解析
- 零基础学python-19.3 列表解析与矩阵
- python列表解析实例(整数操作、字符操作、矩阵操作)
- python中的列表解析和列表生成表达式
- Python 列表解析和生成器表达式
- python 中的列表解析和生成表达式
- python 中的列表解析和生成表达式
- python 中的列表解析和生成表达式
- Python中的列表解析和生成表达式
- Python 列表解析和生成器表达式
- 关于新版ADT创建项目时出现appcompat_v7的问题
- 利用Plupload解决大容量文件上传问题, 带进度条和背景遮罩层
- 关于DNS基本流程的理解
- java 8 新特性终极指南
- weblogic 使用WLST新建域
- 列表解析和矩阵
- 建议93:构造方法应初始化主要属性和字段
- 修改Oracle最大连接数
- ElasticSearch API 之 DELETE
- JNDI深层解答
- js学习总结2
- 内存控制之父子实例
- 华为 5
- uva1363 Joseph's Problem