目录
2、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:返回一个元组,表示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模块
3、Numpy对数组按索引查询
三种索引方法:
- 基础索引
- 神奇索引
- 布尔索引
4、Numpy常用random随机函数汇总
5、数据统计函数
1、Numpy有哪些数学统计函数:
函数名 | 说明 |
---|---|
np.sum | 所有元素的和 |
np.prod | 所有元素的乘积 |
np.cumsum | 元素的累积加和 |
np.cumprod | 元素的累积乘积 |
np.min | 最小值 |
np.max | 最大值 |
np.percentile | 0-100百分位数 |
np.quantile | 0-1分位数 |
np.median | 中位数 |
np.average | 加权平均,参数可以指定weights |
np.mean | 平均值 |
np.std | 标准差 |
np.var | 方差 |
2、怎样实现按不同的axis计算
以上函数,都有一个参数叫做axis用于指定计算轴为行还是列,如果不指定,那么会计算所有元素的结果
3、实例:机器学习将数据进行标准化
A = (A - mean(A, axis=0)) / std(A, axis=0)
7、numpy怎样给数组增加一个维度
背景:
很多数据计算都是二维或三维的,对于一维的数据输入为了形状匹配,经常需升维变成二维
需要:
在不改变数据的情况下,添加数组维度;(注意观察这个例子,维度变了,但数据不变)
原始数组:一维数组arr=[1,2,3,4],其shape是(4, ),取值分别为arr[0],arr[1],arr[2],arr[3]
变形数组:二维数组arr[[1,2,3,4]],其shape实(1,4), 取值分别为a[0,0],a[0,1],a[0,2],a[0,3]
实操:
经常需要在纸上手绘数组的形状,来查看不同数组是否形状匹配,是否需要升维降维
3种方法:
- np.newaxis:关键字,使用索引的语法给数组添加维度
- np.expand_dims(arr, axis):方法,和np.newaxis实现一样的功能,给arr在axis位置添加维度
- np.reshape(a, newshape):方法,给一个维度设置为1完成升维
8、没看懂
9、数组合并
背景:在给机器学习准备数据的过程中,经常需要进行不同来源的数据合并的操作。
两类场景:
- 给已有的数据添加多行,比如增添一些样本数据进去;
- 给已有的数据添加多列,比如增添一些特征进去;
以下操作均可以实现数组合并:
- np.concatenate(array_list, axis=0/1):沿着指定axis进行数组的合并
- np.vstack或者np.row_stack(array_list):垂直vertically、按行row wise进行数据合并
- np.hstack或者np.column_stack(array_list):水平horizontally、按列column wise进行数据合并
10、数组排序
Numpy给数组排序的三个方法:
- numpy.sort:返回排序后数组的拷贝
- array.sort:原地排序数组而不是返回拷贝
- numpy.argsort:间接排序,返回的是排序后的数字索引
3个方法都支持一个参数kind,可以是以下一个值:
- quicksort:快速排序,平均O(nlogn),不稳定情况
- mergesort:归并排序,平均O(nlogn),稳定排序
- heapsort:堆排序,平均O(nlogn),不稳定排序
- stable:稳定排序
kind默认值是quicksort,快速排序平均情况是最快,保持默认即可
11、数组乘法
按照两个相乘数组A和B的维度不同,分为以下乘法:
- 数字与一维/二维数组相乘;
- 一维数组与一维数组相乘;
- 二维数组与一维数组相乘;
- 二维数组与二维数组相乘;
numpy有以下乘法函数:
- *符号或者np.multiply:逐元素乘法,对应位置的元素相乘,要求shape相同
- @符号或者np.matmul:矩阵乘法,形状要求满足(n,k),(k,m)->(n,m)
- np.dot:点积乘法
解释:点积,也叫内积,也叫数量积
两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为:
a·b=a1b1+a2b2+……+anbn。
12、广播概念
广播:
简单理解为用于不同大小数组的二元通用函数(加、减、乘等)的一组规则
广播的规则:
- 如果两个数组的维度数dim不相同,那么小维度数组的形状将会在左边补1
- 如果shape的维度不匹配,但是有维度是1,那么可以扩展维度是1的维度匹配另一个数组;
- 如果shape的维度不匹配,但是没有任何一个维度是1,则匹配失败引发错误;
13、求解线性方程
# 调用solve方法直接求解
没看懂
14、实现SVD矩阵分解
没看懂
15、实现多项式曲线拟合
问题定义:
对于一堆数据点(x, y),能否只根据这些数据,找出一个函数,使得函数画出来的曲线和原始数据曲线尽量匹配?
多项式拟合问题:
任何可微连续的函数,都可以用一个N次多项式来估计,而比N次幂更高阶的部分为无穷小可以忽略不计
3次多项式即:a𝑥3x3 + b𝑥2x2 + cx + d
比如我们可以让sin(x) 约等于 a𝑥3x3 + b𝑥2x2 + cx + d
16、numpy使用matplotlib实现可视化绘图
可以直接将Numpy的数组传给Matplotlib实现可视化绘图:
- 曲线图
- 饼图
- 柱状图
- 直方图
17、numpy计算矩阵求解线性方程
没看懂
18、将数组读写到文件
本文档介绍的是Numpy以自己内建二进制的方式,将数组写出到文件,以及从文件加载数组;
如果是文本、表格类数据,一般使用pandas这个类库做加载和处理,不用numpy
几个方法:
- np.load(filename):从.npy或者.npz文件中加载numpy数组
如果文件后缀是.npy返回单个数组,如果文件后缀是.npz返回多个数组的字典 - np.save(filename, arr):将单个numpy数组保存到.npy文件中
- np.savez(filename, arra=arra, arrb=arrb):将多个numpy数组保存到.npz未压缩的文件格式中
- np.savez_compressed(filename, arra=arra, arrb=arrb):将多个numpy数组保存到.npz压缩的文件格式中
.npy和.npz都是二进制格式文件,用纯文本编辑器打开都是乱码
19、结构化数组
没看懂
20、numpy与pandas数据相互转换
- Numpy数组怎样输入给Pandas的Series、DataFrame;
- Pandas的Series、DataFrame怎样转换成Numpy的数组