Numpy基础知识小记

Numpy基础知识小记

  • Numpy的array以及创建方法和操作函数
      • array对象的背景
      • array本身的属性
      • 创建array的方法
      • 创建array的便捷函数
      • array本身支持大量操作和函数
  • Numpy怎样对数组使用索引查询
      • 基础索引
        • 一维数组
        • 二维数组
      • 神奇索引(对比基础索引,他多了个中括号,因为它是对好多的行和列,而基础索引只是某一行/连着的某几行(切片))
        • 一维数组
        • 二维数组
      • 布尔索引
        • 一维数组
        • 二维数组
        • 条件的组合
  • Numpy常用random随机函数汇总
        • rand函数,参数表示维度(0到1)
        • randn函数,范围不一定在0到1之间,而是呈正态分布
        • randint函数,生成某一个范围内的整数随机数
        • random函数(0到1)(只有一个size)(和最上面额rand函数没啥区别啊???参数都是维数!!)
        • choice函数(顾名思义,就是选择嘛)
        • shuffle()函数,打乱顺序!!(修改原数组,无返回值!!)
        • permutation(x)函数(也是打乱,但是与shuffle不同)
        • normal()函数
        • uniform()函数(【自定范围内】【自定维度】随机数)
        • 实例:对数组加入随机噪声
  • Numpy常用的数学统计函数
        • Numpy有哪些数学统计函数
        • 怎么实现按不同的axis计算
        • 实例:机器学习中将数据进行标准化
  • Numpy计算数组中满足条件的个数
        • 1.使用numpy的random模块生成1亿个数字
        • 2.使用Python原生语法实现
        • 3.使用numpy的向量化操作实现
  • Numpy怎么给数组增加一个维度
        • 方法1:np.newaxis关键字
        • 方法2:np.expand_dims方法
        • 方法3:np.reshape方法
  • Numpy非常重要的数组合并操作


Numpy的array以及创建方法和操作函数

array对象的背景

  • Numpy的核心数据结构,也叫做array就是数组,array对象可以是一维数组,也可以是多维数组;
  • Python的List也可以实现相同的功能,但是array比List的性能更好,包含大量的便捷函数;
  • Numpy成为事实上的Scipy、Pandas、Scikit-Learn、Tensorflow、PaddlePaddle等框架的“通用底层语言”
  • Numpy的array和Python的List的一个区别是,它的元素必须是同一种数据类型,比如都是int类型,这也是Numpy高性能的一个原因

array本身的属性

  • shape:返回一个元组(const的list),表示array的维度
  • ndim:一个数组,表示array的维度的数目
  • size:一个数字,表示array中所有数据元素的数目
  • dtype:array中元素的数据类型

创建array的方法

  • 从Python的列表List和嵌套列表创建array
  • 使用预定函数arange、ones/ones_like、zeros/zeros_like、empty/empty_like、full/full_like、eye等函数创建
  • 生成随机数的np.random模块构建

array本身支持的大量操作和函数

  • 直接主元素加减乘除等算术操作(python原生代码中是一个一个开平方开立方计算,但是numpy可以对整个数组直接进行计算,就相当于把数组压缩成了一个元素!!)
  • 更好用的面向多维的数组索引
  • 求sum/mean等聚合函数
  • 线性代数函数,比如求解逆矩阵、求解方程组

创建array的便捷函数

使用arange创建数字序列

和python中的range一样:

Numpy基础知识小记_第1张图片

使用ones创建全是1的数组

Numpy基础知识小记_第2张图片

使用ones_like创建形状相同的数组

Numpy基础知识小记_第3张图片

zeros和zeros_like同理

empty和empty_like类似,填的全是随机数而非0

fill和fill_like也是,填的是自己想要的值

Numpy基础知识小记_第4张图片
Numpy基础知识小记_第5张图片

使用random模块生成随机数的数组

Numpy基础知识小记_第6张图片

Numpy基础知识小记_第7张图片

array本身支持大量操作和函数

这些操作如果用python实现需要写很多for循环,用numpy数组很容易

Numpy基础知识小记_第8张图片
Numpy基础知识小记_第9张图片

Numpy基础知识小记_第10张图片

最大的特点:array对象,以数组为单位进行运算,不需要for循环!!

Numpy怎样对数组使用索引查询

基础索引

一维数组

索引和python的List一样

二维数组

不太一样嗷,List中是跟C语言的数组一样的,例如x[i][j]

然鹅,array中是x[i,j]

中间是用逗号隔开的!!

Numpy基础知识小记_第11张图片

Numpy基础知识小记_第12张图片

Numpy基础知识小记_第13张图片

Numpy基础知识小记_第14张图片

神奇索引(对比基础索引,他多了个中括号,因为它是对好多的行和列,而基础索引只是某一行/连着的某几行(切片))

一维数组

Numpy基础知识小记_第15张图片

Numpy基础知识小记_第16张图片

argsort传回来的是下标,然后根据神奇索引访问

感觉就是根据index代入啊!!!索引到value然后代入index的输入形式!!

二维数组

Numpy基础知识小记_第17张图片

Numpy基础知识小记_第18张图片

  • 规律:

​ 数组之间有逗号逗号之前是一个数组,代表要取的行号逗号后面是也一个数组,代表要取得列号!!!

原则仍然是根据索引代换进去!!!

布尔索引

一维数组

bool类型就是true或者false哇,就是一种阈值的方法

Numpy基础知识小记_第19张图片

Numpy基础知识小记_第20张图片

二维数组

Numpy基础知识小记_第21张图片

意思是,输出【第三列】元素值【大于5】的那些行

bool的二维数组只有True和False的时候,再以它作为参数,取到的索引是一维的!!!

条件的组合

Numpy基础知识小记_第22张图片

Numpy常用random随机函数汇总

Numpy基础知识小记_第23张图片

rand函数,参数表示维度(0到1)

Numpy基础知识小记_第24张图片

randn函数,范围不一定在0到1之间,而是呈正态分布

Numpy基础知识小记_第25张图片

randint函数,生成某一个范围内的整数随机数

Numpy基础知识小记_第26张图片

random函数(0到1)(只有一个size)(和最上面额rand函数没啥区别啊???参数都是维数!!)

Numpy基础知识小记_第27张图片

choice函数(顾名思义,就是选择嘛)

Numpy基础知识小记_第28张图片

最外层逗号把参数分成前后两块,前面一部分是【给你选的东西】(如果【给你选的东西】是一个数字n,则表示range(n),如果是一个List,则表示在这个里面挑选),后面一部分是size,确定了维度!!

shuffle()函数,打乱顺序!!(修改原数组,无返回值!!)

Numpy基础知识小记_第29张图片

遇到多维数组,只会对第一维度进行打乱!!!

意思就是这样的效果:
Numpy基础知识小记_第30张图片

即进行行打乱,但是后面还是跟着第一位(老大)的!!!同一行一直是同一行,只是行与行之间打乱

permutation(x)函数(也是打乱,但是与shuffle不同)

把一个数组x进行随机排列,或者数字的全排列

Numpy基础知识小记_第31张图片

这与shuffle类似,一个数的时候表示range(n),多个数则表示多维度

但是!!!!shuffle是浅拷贝,即改变了原数组;而permutation是深拷贝,返回的是一个新的数组,不改变原来数组的值!!!!!!

normal()函数

按照平均值loc和方差scale生成高斯分布的数字

Numpy基础知识小记_第32张图片

uniform()函数(【自定范围内】【自定维度】随机数)

Numpy基础知识小记_第33张图片

实例:对数组加入随机噪声

Numpy基础知识小记_第34张图片

效果如下

Numpy基础知识小记_第35张图片

Numpy基础知识小记_第36张图片

Numpy常用的数学统计函数

Numpy有哪些数学统计函数

Numpy基础知识小记_第37张图片

np.cumsum(arr):

某个位置的值是这样得出来的,计算从arr[0]开始一直到这个位置的所有元素和(cumprod同理),用处是,累计一个东西,比如一个水电费啥的

np.percentile(百分数划分),quantile(小数划分):

就是把整个数组按值整成在一个数轴上,然后取位于百分之多少上的数(如果不是整数,就取两侧数据的平均)

​ 举个例子:高等院校的入学考试成绩经常以百分位数的形式报告。比如,假设某个考生在入学考试中的语文部分的原始分数为 54 分。相对于参加同一考试的其他学生来说,他的成绩如何并不容易知道。但是如果原始分数54分恰好对应的是第70百分位数,我们就能知道大约70%的学生的考分比他低,而约30%的学生考分比他高。

在这里插入图片描述

中位数、平均数 、标准差、方差、加权平均

对于加权平均,因为arr.shape是元组类型,例如(1,2,3)

  • 如果要用np.random.rand(),则必须要传入“1,2,3”而非"(1,2,3)",因此要用"*"号,把元组打散成元素!!!!

  • 如果要用np.random.random(),则可以传入"(1,2,3)",变成np.random.random((1,2,3)),就不需要用“*”打散元组了!!!

怎么实现按不同的axis计算

Numpy基础知识小记_第38张图片

举个例子:

当axis=0时,就是把整个数组上下压扁,压成一行

当axis=1时,就是把整个数组左右压扁,压成一列,然后再横着排成一行

实例:机器学习中将数据进行标准化

Numpy基础知识小记_第39张图片

  • 小知识点:Numpy的广播

Numpy基础知识小记_第40张图片

如图,arr为3×4的矩阵,但是mean是每一列平均值组成的,是1×4的矩阵,这时候他会自动把后者复制成三份,变成3×4的矩阵,再和arr进行运算。这就是numpy的广播。

例子:

Numpy基础知识小记_第41张图片

效果如下:

Numpy基础知识小记_第42张图片

标准化的公式要牢记嗷!!!

标准化的公式要牢记嗷!!!

标准化的公式要牢记嗷!!!

Numpy计算数组中满足条件的个数

需求:有一个非常大的数组比如1亿个数字,求出里面数字小于5000的数字数目

1.使用numpy的random模块生成1亿个数字

Numpy基础知识小记_第43张图片

2.使用Python原生语法实现

Numpy基础知识小记_第44张图片

3.使用numpy的向量化操作实现

Numpy基础知识小记_第45张图片

这里用到了Numpy的布尔索引

对比体会一下python原生语法的遍历和numpy的bool索引!!!

对比体会一下python原生语法的遍历和numpy的bool索引!!!

对比体会一下python原生语法的遍历和numpy的bool索引!!!

Numpy怎么给数组增加一个维度

Numpy基础知识小记_第46张图片

方法1:np.newaxis关键字

Numpy基础知识小记_第47张图片

Numpy基础知识小记_第48张图片

Numpy基础知识小记_第49张图片

  • 咋理解呢?

就是逗号左边是行,右边是列,然后np.newaxis在左边的时候意思就是:添加了空的行

如果np.newaxis在逗号右边,意思就是:添加了空的列!!!

方法2:np.expand_dims方法

Numpy基础知识小记_第50张图片

其效果和上面np.newanxis关键字一摸一样(不过感觉这个好理解啊)

axis=0则是添加空行,这个之前用mean、sum、average等进行每一列的计算时的想法相同,都是液压机压缩的方法axis=1则是左右压缩!!!

方法3:np.reshape方法

Numpy基础知识小记_第51张图片

Numpy基础知识小记_第52张图片

因为我们很多时候,其实数据太多,不知道到底有多少数据

这个时候就用“-1”来让Numpy自己算到底有多少数据即可!!!

Numpy非常重要的数组合并操作

  • 行合并的三种方法

Numpy基础知识小记_第53张图片

  • 列合并的三种方法

Numpy基础知识小记_第54张图片

你可能感兴趣的:(机器学习,python,numpy,机器学习)