再续前缘,上次一说到了创建数组,改变数组的形状,还有对数组进行一些简单的操作,但是呢这些对于我来说还是远远不够的嘿嘿嘿,今天我们就来仔细调教一下Numpy(剧透一下:是被Numpy锤爆狗头 o(*≧▽≦)ツ┏━┓
今天主要涉及的内容如下:
一、Numpy中的random???/h4>二、通用函数(说的简单点 加 减 乘 除 排序 聚合 还有自己定义的匿名函数的应用)
三、数组的广播机制(这里就体现出来Numpy的强大了嘿嘿嘿)
四、让我们抓破头的估计就是这个花哨的索引了吧哈哈哈哈(*****的)
话不多说了,开始上干货!(偷偷告诉粗体是重点,别的可以当废话看看哦~)
一、Numpy中的random???/h2>
为什么要说这个???,当然是为了偷懒,比如我就是一个懒人,测试代码的时候就不爱自己模拟数据,有random库它不香嘛?
1.预热np.random.seed(x)
????但是这个random库比较鳝(善)变,那么就要用到 np.random.seed(x) 函数 括号里面的x是每一个随机产生的数组的对应的值
????举个栗子理解一下,就好比你种下了一个种子,长出来了一个树,难道他还能自己拔开根跑了?
2.下面就是各种特征的数组
? ? 1) np.random.rand(x,y,z)?生成一个值为[0,1)之间的数组,形状由x,y指定,这里应该默认是二维吧,没有参数的话我哪知道是啥,我丢~一个值给你
? ? 2) np.random.randn(x,y) 生成均值(μ)为0,标准差(σ)为1的标准正态分布的值,这里的x,y还是指定形状的哦,到这里可能有小伙伴呢不知道什么是正态分布,那么集智慧与机灵的我就给各位看官找到了相关的解释嘿嘿嘿贴心不,给个关注呗??
? ? ? ? 正态分布[别名:高斯分布]是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。
? ? ? ? 形状特征:正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。
若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布。
????3)?np.random.randint(p,size=(x,y))?生成指定范围内的随机数,并且可以通过size参数指定维度?x,y还是指定形状
3.随机采样,随随便便的找一个值(这个没啥栗子可以吃了)
????np.random.choice(arr,size=(x,y))? 从arr数组中随机选取值生成一个x行y列的二维数组
????np.random.choice(arr,m) 从arr数组中随机选取m个值?返回一个一维数组
????np.random.choice(p,m) 从0-p的范围内随机选取m个值?返回一个一维数组
4.数组的打乱(这个吧,排座位我jio的也用不到哈哈哈)
? ? np.random.shuffle(arr)?
? ? 还有一种方法 np.random.permutation(arr) 但我目前没有发现他们有什么不同
二、通用函数(说的简单点 数组加 减 乘 除 排序 聚合 还有自己定义的匿名函数的应用)
一元函数(可以简单的理解为就是只传一个参数)
二元函数(可以简单的理解为传两个参数哦):
聚合函数(看名字应该可以看出来是两个数组之间的运算吧):
布尔数组的函数(这个主要就是应用在判断数组中的值 是否存在 是否唯一 是否为唯一值)
据我所知排序的算法有很多种,但是我不懒,不想学嘿嘿嘿,直接就用 np.sort来解决吧
np.sort(arr,axis=0):指定轴进行排序。默认是使用数组的最后一个轴进行排序。默认会采用升序排序? 0是垂直排,1是竖直排 返回新数组哦!
ndarray.sort(),这个方法会直接影响到原来的数组,而不是返回一个新的排序后的数组
降序排列的话
??1. 使用负号??np.sort(-a)
? 2. 使用sort和argsort以及take?
indexes = np.argsort(-a) #排序后的结果就是降序的
np.take(a,indexes) #从a中根据下标提取相应的元素
沿着某个轴执行的函数(我自己给他起了个名字叫做为所欲为函数)?np.apply_along_axis
np.apply_along_axis(func(),axis=,arr=)? 传入需要执行的函数 axis的值0是垂直排,1是竖直排 这个东西我觉得还是很好用的,以后用自己的公式算个东西还是很方便快速的。
np.linspace(m,n,x)? 将从m到n范围内平均分成x份 这个嘛 应该应用的测试集和训练集的分割上嘛?具体的每个人都有不同的用法哈哈哈哈,不如单纯的拿他做一个除法嘿嘿嘿~
np.unique?返回数组中的唯一值。(You are my only one!表白各位正在都本篇文章的大佬们)
np.unique(arr,return_counts=True)? # 记得把True写上哈 (??????)??
三、数组的广播机制(这里就体现出来Numpy的强大了嘿嘿嘿)
这里的话没啥内容,具体的内容你去看上面的二元函数把,哈哈哈哈我就是占个标题而已,不然两个太少了 ╰( ̄▽ ̄)╭
四、让我们抓破头的估计就是这个花哨的索引了吧哈哈哈哈(*****的)
花哨的索引在概念上非常简单,它意味着传递一个索引数组来一次性获得多个数组元素。(这老师给的,但我不这么认为简单哈(ρ_?).。)
目标数组是一维数组还好说哈
先从最简单的开始吧,一维数组作为索引条件选出来目标数组中的值
很显然第一种方法有点笨,也有点慢,但我还想用(呸,才怪)
难点的来了哈,我把ind变成一个二维数组 它该怎么取值呢?
很显然哈,二维数组中的每一个元素里面的值代表目标数组中的位置,从目标数组中取出值后返回一个和索引结构一样的数组
接下来,送命的他来了。
最后还有一个掩码操作,这个给个眼神(o???)自己悟吧?
好了今天的课就到这里了,虽然文件的操作鸽了,但是明天会补的!
附上今天的上课截图,嘘(??????)??~