大噶好!这是小白的第四篇博客,上次学习了pandas工具包,这次就来学习一下与它捆绑使用的numpy包好啦!
大噶可以先去numpy官网上了解一下,更全面,更清晰numpy官网。
NumPy(numerical python):一个包含许多高级数值编程工具用于科学计算的python包,为需要进行严格的数据处理量身定做的第三方工具包。表达N维数组的最基础库 擅长数组运算
python下使用numpy时先要引入numpy库,今天我们从numpy提供的两种对象来学习使用numpy包,它们分别是ndarray和ufunc。
import numpy as np
Numpy是什么
一个开源的python科学计算库
Numpy有什么功能
主要是用来操作数组和矩阵,是科学计算、深度学习等高端领域的必备工具,使用TensorFlow、Caffe框架训练神经网络模型时,需要进行大量复杂的运算,可以直接调用Numpy里面的API
Python + Numpy == Matlab
一.ndarray
N-dimensional array object,可以理解为多维数组N维序列,python中的array一维数组和C语言的一维数组一点像,它直接保存数值而不是对象地址(就理解为指针),却没有各种运算函数,因此不适合做数值运算。这个时候,numpy就提供了多维数组的数值运算,让我们一起来看看吧!
numpy库概述
数组中所有元素的类型必须相同,数组中元素可以用整数索引,序号
从0开始。ndarray 类型的维度(dimensions)叫做轴(axes),轴的个数
叫做秩(rank)。一维数组的秩为1,二维数组的秩为2,二维数组相当于
由两个一维数组构成。
1.创建数组
先介绍用列表或者元组创建数组的方法,用array创建一维数组,若要创建多维按下列格式创建,可以用dtype查看类型,用shape查看属性,这里再补充一句,ndim函数可以,这里再补充一句,求矩阵维数可以用ndim函数:
如上图所示,a是一维数组,所以shape有一个元素,d是二维数组,所以shape有两个元素,规定第0轴是行,第1轴是列,像d第0轴长度为2,第1轴长度为4。我们还可以在保持数组元素个数不变的情况下,用shape函数修改数组属性(tip:数组元素在内存中的位置没有改变)。当某个轴元素为-1时,会根据数组元素个数自动计算轴长度。那顺便再介绍一下reshape函数,用reshape可以创建不同属性的新数组,且原数组元素改变新创建的数组元素也会相应的改变,原因是它们共享数据存储区域。
还有其他许多函数,其实用法与在python中大多类似,像size函数返回矩阵元素个数(shape的乘积),itemsize函数返回矩阵中每个元素所占的字节数。
我们再来了解一下数组的变换,像多维变一维,一维变多维,转置:
但是,用这种方法创建数组太low低效率了(对不起大噶,但是前面都是废话)。所以numpy提供了许多专门用来创建数组的函数,这里我们来介绍一丢丢。
1.arange函数
通过arange(开始值,终值,步长)来创建一维数组,和python中的range函数有点像,tip:数组不包括终值。
2.linspace函数
linspace(开始值,终值,元素个数),通过endpoint关键字指定是否包含终值,默认未设置都是包含终值
3.logspace函数
与linspace函数类似,不同点是它创建等比数列:
ndarray类的常用属性
创建一个简单的数组后,可以查看ndarray类型的一些基本属性
属性 | 描述 |
---|---|
ndarray.ndim | 数组轴的个数,也被称作秩 |
ndarray.shape | 数组在每个维度上大小的整数元组 |
ndarray.size | 数组元素的总个数 |
ndarray.dtype | 数组元素的数据类型,dtype类型可以用于创建数组中 |
ndarray.itemsize | 数组中每个元素的字节大小 |
ndarray.data | 包含实际数组元素的缓冲区地址 |
ndarray.flat | 数组元素的迭代器 |
ndarray类的形态操作方法
方法 | 描述 |
---|---|
ndarray.reshape(n,m) | 不改变数组ndarray,返回一个维度为(n,m)的数组 |
ndarray.resize(new_shape) | 与reshape()作用相同,直接修改数组ndarray |
ndarray.swapaxes(ax1,ax2) | 将数组n个维度中任意两个维度进行调换 |
ndarray.flatten() | 对数组进行降维,返回一个折叠后的一维数组 |
ndarray.ravel() | 作用同np.flatten(),但是返回数组的一个视图 |
np.flatten()函数用于数组降维,相当于平铺数组中数据,该功能在矩阵运算及图像处理中用处很大。
ndarray类的索引和切片方法
方法 | 描述 |
---|---|
x[i] | 索引第i个元素 |
x[-i] | 从后向前索引第i个元素 |
x[n:m] | 默认步长为1,从前往后索引,不包含m |
x[-m:-n] | 默认步长为1,从后往前索引,结束位置为n |
x[n,m,i] | 指定i步长的由n到m的索引 |
数组切片得到的是原始数组的视图,所有修改都会直接反映到源数组。如果需要得到的ndarray 切片的一份副本,需要进行复制操作,比如
arange[5:8].copy()
数组的一般操作
1. hstack函数
用于水平组合数组
2.vstack函数
用于垂直组合数组
3.concatenate函数
该函数可以同时实现这两种方式,通过指定axis参数,默认为0,垂直组合,1水平组合
4.hsplit函数
用于水平分割
5.vsplit函数
用于垂直分割
6.split函数
用split函数可以同时实现这两个效果,和组合一样用axis参数区别,需要注意的是设置的水平分割数必须可被行数整除,垂直分割数必须可以被列数整除:
2.创建矩阵
除了上面数组组合成矩阵的方法外,numpy也提供专门处理矩阵的数据结构matrix,像生成矩阵可按如下输入:
>>>np.mat('1 2 3;4 5 6;7 8 9')
matrix([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
存取矩阵行、列、元素
其实上面例子有用到一点哦,存取数组元素和python标准方法相同:用整数做下标可以获取数组中某元素;用范围做下标得到数组切片,同样含左不含右,范围中第三个元素表示步长;省略开始或者结束下标表示从头开始或者直到结束。
对于矩阵(二维数组)下标表示取矩阵中的某一行,若第一个元素为:则表示取某一列;eye函数同python一样是产生0-1标准矩阵,这里不再介绍zeros,ones等:
多维数组的存取下标需要用多个值来表示,numpy采用tuple(组元)来表示,并且这里的组元不需要用圆括号括起来。并且元素的值看上去像组元但实际上它是一个结构。
3.数组运算
数组加减乘除即对应元素加减乘除,如果是标量操作作用在数组的每一个元素上
numpy库的算术运算函数
【这些函数中,输出参数y 可选,如果没有指定,将创建并返回一个新的数组保存计算结果;如果指定参数,则将结果保存到参数中。np.add(a,b,a)则表示a+=b】
numpy库的比较运算函数
其将返回一个布尔数组,它包含两个数组中对应元素值的比较结果。
numpy库的其他运算函数
。在numpy 中,
运算基本单位是数组,运算规则与实数一样,包括:算术运算、比较运算、统计运算、三角运算、随机运算等。numpy 库的广泛使用与完备
的运算体系密切相关。
二、ufunc运算
universal function是对数组进行处理的函数,我们在这里学习一些简单又用到概率大的函数。
1.sin函数
对传入数组中的每个元素求正弦值返回一个新的数组,且原数组没有改变,之所以用numpy.sin而不用math.sin的原因是前者快,毕竟时间就是金钱嘛。
2.add函数
同样返回一个新的数组,每个元素都是为两个数组对应元素之和。
3.其他函数
add(+),subtract(-),multiply(*),divide(/),true dvide(/ 返回精确的商),floor divide(//),negative(-),power(**),remainder(%)
4.frompyfunc函数
frompyfunc(计算单个元素的函数,此函数的输入参数的个数,此函数的返回值的个数)
三、结语
emmmmmm其实第二部分还没有写完,断网断电实在莫得办法,那,就酱吧,这个就当做上,下次补下好啦,白白!