机器学习笔记05-----python基础01
1.python库
2.利用python可以绘制各种图像
3.numpy和scipy的使用案例
(1)利用numpy做数据生成
# # 开场白: # numpy是非常好用的数据包,如:可以这样得到这个二维数组 # [[ 0 1 2 3 4 5] # [10 11 12 13 14 15] # [20 21 22 23 24 25] # [30 31 32 33 34 35] # [40 41 42 43 44 45] # [50 51 52 53 54 55]] a = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6) print(a)
运行结果:
代码分析:
Numpy 中 arange() 主要是用于生成数组,具体用法如下;
numpy.arange(start, stop, step, dtype = None)
在给定间隔内返回均匀间隔的值。
值在半开区间 [开始,停止]内生成(换句话说,包括开始但不包括停止的区间),返回的是 ndarray 。
使用案例:
from numpy import * # 引入numpy A = arange(5) # 只有结束项 print(A) # 结果 [0 1 2 3 4] 结果不包含结束项 print(type(A)) # 结果 <class 'numpy.ndarray'> A = arange(1, 5) # 起点为1,步长默认为1 print(A) # 结果 [1 2 3 4] A = arange(1, 5, 2) # 步长默认为2 print(A) # 结果 [1 3] A = arange(1, 5.2, 0.6) # 浮点数参数,结果就不一定完全符合了 print(A) # 结果 [1. 1.6 2.2 2.8 3.4 4. 4.6 5.2]
reshape函数是numpy中一个很常用的函数,作用是在不改变矩阵的数值的前提下修改矩阵的形状。
import numpy as np x=np.array([[1,2],[3,4]]) y=np.reshape(x,(1,4)) print(x) print(y)
效果图:
缺省值-1代表我不知道要给行(或者列)设置为几,reshape函数会根据原矩阵的形状自动调整。
import numpy as np x=np.array([[1,2],[3,4]]) y=np.reshape(x,(4,-1)) print(x) print(y)
(2)创建一个数组
标准Python的列表(list)中,元素本质是对象。
如:L = [1, 2, 3],需要3个指针和三个整数对象,对于数值运算比较浪费内存和CPU。
因此,Numpy提供了ndarray(N-dimensional array object)对象:存储单一数据类型的多维数组。
<1>创建一维数组
# # 1.使用array创建 # 通过array函数传递list对象 L = [1, 2, 3, 4, 5, 6] print("L = ", L) a = np.array(L) print("a = ", a) print(type(a))
运行结果:
<2>创建多维数组
# # # 若传递的是多层嵌套的list,将创建多维数组 b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]) print(b) # # # # 数组大小可以通过其shape属性获得 print(b.shape)
运行结果:
<3>改变数组的形状
# # # 也可以强制修改shape b.shape = 4, 3 print(b) # # # # 注:从(3,4)改为(4,3)并不是对数组进行转置,而只是改变每个轴的大小,数组元素在内存中的
运行结果:
<4>缺省值-1代表我不知道要给行(或者列)设置为几,shape函数会根据原矩阵的形状自动调整。
# # # 当某个轴为-1时,将根据数组元素的个数自动计算此轴的长度 b.shape = 2, -1 print(b) print(b.shape)
运行结果:
<5>使用reshape方法,可以创建改变了尺寸的新数组,原数组的shape保持不变
c = b.reshape((4, -1)) print("b = \n", b) print('c = \n', c)
运行结果:
(3)使用函数创建数组
如果生成一定规则的数据,可以使用NumPy提供的专门函数
<1>arange函数
arange函数类似于python的range函数:指定起始值、终止值和步长来创建数组
和Python的range类似,arange同样不包括终值;但arange可以生成浮点类型,而range只能是整数类型
a = np.arange(1, 10, 0.5) print(a)
运行结果:
<2>linspace函数
# # # linspace函数通过指定起始值、终止值和元素个数来创建数组,缺省包括终止值 b = np.linspace(1, 10, 10) print('b = ', b) # # # # # 可以通过endpoint关键字指定是否包括终值 c = np.linspace(1, 10, 10, endpoint=False) print('c = ', c)
运行结果:
<3>logspace函数
logspace可以创建等比数列
# # 和linspace类似,logspace可以创建等比数列 # # 下面函数创建起始值为10^1,终止值为10^2,有10个数的等比数列 d = np.logspace(1, 2, 10, endpoint=True) print(d)
运行结果:
(4)数组元素的存取方法
<1>常规方法
# 3.1常规办法:数组元素的存取方法和Python的标准方法相同 a = np.arange(10) print(a) # # # 获取某个元素 print(a[3]) # # # # 切片[3,6),左闭右开 print(a[3:6]) # # # # 省略开始下标,表示从0开始 print(a[:5]) # # # # 下标为负表示从后向前数 print(a[3:]) # # # # 步长为2 print(a[1:9:2]) # # # # 步长为-1,即翻转 print(a[::-1]) # # # # 切片数据是原数组的一个视图,与原数组共享内容空间,可以直接修改元素值 a[1:4] = 10, 20, 30 print(a) # # # # 因此,在实践中,切实注意原始数据是否被破坏,如: b = a[2:5] b[0] = 200 print(a)
运行结果:
<2>整数/布尔数组存取
实例1:
# 根据整数数组存取:当使用整数序列对数组元素进行存取时, # 将使用整数序列中的每个元素作为下标,整数序列可以是列表(list)或者数组(ndarray)。 # 使用整数序列作为下标获得的数组不和原始数组共享数据空间。 a = np.logspace(0, 9, 10, base=2) print(a) i = np.arange(0, 10, 2) print(i) # # # # 利用i取a中的元素 b = a[i] print(b) # # # b的元素更改,a中元素不受影响 b[2] = 1.6 print(b) print(a)
运行结果:
实例2:
# 使用布尔数组i作为下标存取数组a中的元素:返回数组a中所有在数组b中对应下标为True的元素 # # 生成10个满足[0,1)中均匀分布的随机数 a = np.random.rand(10) print(a) # # # 大于0.5的元素索引 print(a > 0.5) # # # # 大于0.5的元素 b = a[a > 0.5] print('b=',b) # # # # 将原数组中大于0.5的元素截取成0.5 a[a > 0.5] = 0.5 print(a) # # # # b不受影响 print(b)
运行结果:
<3>二维数组获取
# [[ 0 1 2 3 4 5] # [10 11 12 13 14 15] # [20 21 22 23 24 25] # [30 31 32 33 34 35] # [40 41 42 43 44 45] # [50 51 52 53 54 55]] a = np.arange(0, 60, 10) # 行向量 print('a = ', a) b = a.reshape((-1, 1)) # 转换成列向量 print(b) c = np.arange(6) print(c) f = b + c # 行 + 列 print(f) # # 合并上述代码: a = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6) print(a)
运行结果:
<4>二维数组切片
a = np.arange(0, 60, 10).reshape((-1, 1)) + np.arange(6) print(a) # # 二维数组的切片 print(a[(0, 1, 2, 3), (2, 3, 4, 5)]) print(a[3:, [0, 2, 5]]) i = np.array([True, False, True, False, False, True]) print(a[i]) print(a[i, 3])
运行结果:
(5)绘图
# 5.1 绘制正态分布概率密度函数 matplotlib.rcParams['font.sans-serif'] = [u'SimHei'] #FangSong/黑体 FangSong/KaiTi matplotlib.rcParams['axes.unicode_minus'] = False mu = 0 sigma = 1 x = np.linspace(mu - 3 * sigma, mu + 3 * sigma, 50) y = np.exp(-(x - mu) ** 2 / (2 * sigma ** 2)) / (math.sqrt(2 * math.pi) * sigma) print(x.shape) print('x = \n', x) print(y.shape) print('y = \n', y) # plt.plot(x, y, 'ro-', linewidth=2) plt.plot(x, y, 'r-', x, y, 'go', linewidth=2, markersize=8) plt.grid(True) plt.title("高斯分布") plt.show()
效果图:
【推荐】国内首个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)