1.列表推导式
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。
它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以 if 和 for 语句为上下文的表达式运行完成之后产生。
列表推导式的执行顺序:各语句之间是嵌套关系,左边第二个语句是最外层,依次往右进一层,左边第一条语句是最后一层。
(1)range() 函数
可创建一个整数列表,一般用在 for 循环中。
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0,5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0,5) 等价于 range(0, 5, 1)
示例:
>>>range(10) #从 0 开始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]>>> range(1, 11) #从 1 开始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> range(0, 30, 5) #步长为 5
[0, 5, 10, 15, 20, 25]>>> range(0, 10, 3) #步长为 3
[0, 3, 6, 9]>>> range(0, -10, -1) #负数
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]>>>range(0)
[]>>> range(1, 0)
[]
(2)列表表达式的应用案例
list = [x*y for x in range(1,5) if x > 2 for y in range(1,4) if y < 3]
print(list)
他的执行顺序是:
for x in range(1,5)if x > 2
for y in range(1,4)if y < 3x*y
运行效果:
2.Numpy简介
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 是一个开源的 Python 算法库和数学工具包。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。
numpy其实就是一个数组对象。
3.Numpy数组的创建、索引、切片、转置
(1)numpy的入门案例
importnumpy as np
data= [1, 2, 3, 4, 5]
n= np.array(data * 10)print(n)print(n.shape) #shape方法获取n这个数组的维度
print(n.dtype) #获取数组的类型
运行效果:
(2)numpy数组的创建
<1>嵌套序列:由一组等长列表组成的列表
importnumpy as np
arr=[[1,2,3,4],[1,2,3,4]]
arr2=np.array(arr)print(arr2)
效果图:
<2>zeros函数进行指定长度数组的创建
importnumpy as np
arr2=np.zeros(10)print(arr2)
效果图:
<3>ones函数创建数组
importnumpy as np
arr2=np.ones((2,3))print(arr2)
效果图:
<4>arange函数创建数组
importnumpy as np
arr2=np.arange(10)print(arr2)
效果图:
<5>数据类型转换
importnumpy as np
arr=np.array([1,3.4,5,8,9])print(arr)print(arr.dtype)print(arr.astype(np.int32))
效果图:
(3)矢量化
numpy的数组通常在不用编写循环的情况下进行批量运算
<1>一维数组
importnumpy as np
arr1=np.array([1,2,3,4])
arr2=np.array([2,4,6,8])print(arr1+arr2)
效果图:
<2>二维数组
importnumpy as np
arr1=np.array([[1,2,3,4],[1,2,3,4]])
arr2=np.array([[2,4,6,8],[3,6,9,12]])print(arr1+arr2)
效果图:
<3>其他运算(以乘法为例)
importnumpy as np
arr1=np.array([[1,2,3,4],[1,2,3,4]])
arr2=np.array([[2,4,6,8],[3,6,9,12]])print(arr1*arr2)
效果图:
<4>numpy数组的广播
importnumpy as np
arr1=np.array([[1,2,3,4],[1,2,3,4]])
arr2=arr1*5
print(arr1)print(arr2)
效果图:
(4)numpy数组的索引和切片
<1>一维数组
importnumpy as np
arr=np.arange(10)print(arr)print(arr[2]) #获取arr数组的第2个元素(索引从0开始)
print(arr[4:]) #获取arr数组的第4个元素开始到结尾的数组
arr[1:3]=11 #修改数组的元素值(不包含3的位置)
print(arr)
效果图:
<2>二维数组
importnumpy as np
arr=np.array([[1,2,3],[4,5,6]])print(arr[0][1])
效果图:
<3>numpy数组比较运算
importnumpy as np
names=np.array(['tony','jack','linda'])print(names=='jack')
效果图:
<4>numpy数组的花式索引
import numpy as np
arr=np.arange(32).reshape(8,4)
print(arr)
print(arr[[1,5,7,2]])
取出8*4矩阵的第1,5,7,2行组成新的数组
效果图:
(5)数组转置和轴对换
转置是重塑数组的一种特殊形式。常用的方法是T 和transpose
importnumpy as np
arr=np.arange(15).reshape(3,5)print(arr)print(arr.transpose())
效果图:
4.numpy的文件操作
numpy可以读写磁盘上的文本数据或者是二进制数据
(1)保存为npy格式的文件
主要应用的函数是np.save和np.load,默认情况下数据是以未压缩的原始二进制格式保存在扩展名为.npy文件中
importnumpy as np
arr=np.arange(10)
np.save('lucky',arr)print(np.load('lucky.npy'))
效果图:
(2)将数据保存为txt格式的文件
importnumpy as np
arr=np.arange(10)
np.savetxt('lucky.txt',arr,delimiter=',')print(np.loadtxt('lucky.txt',delimiter=','))
效果图:
5.numpy的线性代数
dot函数计算矩阵的乘法运算、trace函数计算对角线元素的和、det函数计算矩阵的行列式、eig计算矩阵的特征值和特征向量、inv计算矩阵的逆
importnumpy as np
x=np.array([[1,2,3],[4,5,6]])
y=np.array([[1,2],[4,5],[7,8]])print(x.dot(y))
效果图: