NLP学习笔记08---python编程高阶函数使用(numpy数组的创建、索引、装置、文件的操作等)
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 < 3 x*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的入门案例
import numpy 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>嵌套序列:由一组等长列表组成的列表
import numpy as np arr=[[1,2,3,4],[1,2,3,4]] arr2=np.array(arr) print(arr2)
效果图:
<2>zeros函数进行指定长度数组的创建
import numpy as np arr2=np.zeros(10) print(arr2)
效果图:
<3>ones函数创建数组
import numpy as np arr2=np.ones((2,3)) print(arr2)
效果图:
<4>arange函数创建数组
import numpy as np arr2=np.arange(10) print(arr2)
效果图:
<5>数据类型转换
import numpy as np arr=np.array([1,3.4,5,8,9]) print(arr) print(arr.dtype) print(arr.astype(np.int32))
效果图:
(3)矢量化
numpy的数组通常在不用编写循环的情况下进行批量运算
<1>一维数组
import numpy as np arr1=np.array([1,2,3,4]) arr2=np.array([2,4,6,8]) print(arr1+arr2)
效果图:
<2>二维数组
import numpy 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>其他运算(以乘法为例)
import numpy 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数组的广播
import numpy as np arr1=np.array([[1,2,3,4],[1,2,3,4]]) arr2=arr1*5 print(arr1) print(arr2)
效果图:
(4)numpy数组的索引和切片
<1>一维数组
import numpy 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>二维数组
import numpy as np arr=np.array([[1,2,3],[4,5,6]]) print(arr[0][1])
效果图:
<3>numpy数组比较运算
import numpy 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
import numpy as np arr=np.arange(15).reshape(3,5) print(arr) print(arr.transpose())
效果图:
4.numpy的文件操作
numpy可以读写磁盘上的文本数据或者是二进制数据
(1)保存为npy格式的文件
主要应用的函数是np.save和np.load,默认情况下数据是以未压缩的原始二进制格式保存在扩展名为.npy文件中
import numpy as np arr=np.arange(10) np.save('lucky',arr) print(np.load('lucky.npy'))
效果图:
(2)将数据保存为txt格式的文件
import numpy 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计算矩阵的逆
import numpy as np x=np.array([[1,2,3],[4,5,6]]) y=np.array([[1,2],[4,5],[7,8]]) print(x.dot(y))
效果图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)