目录
简介
numpy库是一个开源的python科学计算基础库,它包含一个强大的N维数组对象ndarray。numpy库SciPy、Pandas等数据处理或科学计算库的基础。numpy的引用方法如下,np是约定的别名。
import numpy as np
- numpy的数组对象:ndarray
ndarray是一个多维数组对象。ndarray数组一般要求所有元素类型相同,数组下标从0开始。ndarray在程序中的别名是array。ndarray对象的属性如下图:
其中Out[22]里的’int32’是numpy定义的元素类型。ndarray的元素类型如下:
1. ndarray数组的创建
(1)从python中的列表、元组等类型创建ndarray数组
x=np.array(list/tuple)
x=np.array(list/tuple,dtype=np.float32)
其中list代表列表,tuple代表元组,dtype指定每个元素的数据类型。当ndarray()不指定dtype时,Numpy将根据数据情况关联一个dtype类型。
(2)使用numpy中的函数创建ndarray数组。
像ones,zeros,eye等函数生成的数组的元素默认是浮点数类型,arange函数生成的数组的元素默认是整数类型,用户可以通过dtype指定元素的数据类型。
也可以生成多维数组,如:
还有几个和上面类似的函数
(3)使用numpy中的其它函数创建ndarray数组
numpy中除了arange函数外,大部分函数生成的元素默认都是浮点数类型。
2. ndarray数组的变换
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换
(1)ndarray数组的维度变换
(2)ndarray数组的类型变换:new_a=a.astype(new_type)
注意:astype()方法一定会创建新的数组
(3)ndarray数组向列表的转换:ls=a.tolist()
3. ndarray数组的操作:索引和切片
索引:获取数组中特定位置元素的过程。
切片:获取数组元素子集的过程。
(1)一维数组的索引和切片
(2)多维数组的索引
(3)多维数组的切片
4. ndarray数组的运算
(1)数组与标量间的运算(一个数就叫做标量)
数组与标量之间的运算作用于数组的每一个元素,下面的例子是计算数组a与元素平均值的商。
(2)numpy中一元函数
其中第一行表示np.abs(x)和np.fabs(x)都可以计算数组各元素的平均值,最后一行的np.ceil(x)表示大于x的最小整数,np.floor(x)表示小于x的最大整数。
最后一行的np.sign(x)表示若x是正数输出1,若x是负数输出-1,若x=0则输出0。下面是例子:
(3)numpy二元函数
其中第一行的**表示乘方运算,比如2**3=2³=8.
5. 数据的csv文件读取
CSV(Comma-Separated Value,逗号分隔值)是一种常见的文件格式,用来存储批量数据,下图展示了将一个表格存储为CSV文件。
(1)将数组存为CSV文件
下面是例子
生成的a.csv文件如下图。
(2)将CSV文件读入numpy数组中
(3)CSV文件的局限性
CSV文件只能有效地存取一维和二维数组,即np.savetxt(),np.loadtxt()只能有效存取一维和二维数组。
6. 多维数据的存取
(1)tofile()方法和fromfile()方法
下面是例子:
打开b.dat文件,内容如下。
可见,b.dat文件并没有包含任何维度信息,它只是将数组中的元素逐一列出。但sep=‘’,即数据分割字符串是空串时输出的文件是二进制文件,此时我们不能用文本编辑器进行查看,因此二进制文件主要是用来进行数据备份。
例子如下:
该方法需要读取时知道存入文件时数组的维度和元素类型,因此tofile()和np.fromfile()需要配合使用。也可以通过元数据文件来存储额外信息。
7. numpy的便捷文件读取
例子如下:
可见,.npy文件可以直接还原出存储数据的维度和变量信息。打开a.npy文件,内容如下:
可见,在文件的开始以显示的方式记录了数组的元信息,包含数据的维度,元素的数据类型等。因此np.load()就可以解析这部分内容,从而获取数组的相关信息。
如果在编写程序时需要通过问价对数据进行缓存,可以使用np.save()和np.load()方法。如果需要存储文件来和其它的程序进行数据交互和对接,则可以生成csv文件,或通过tofile()和fromfile()方法来生成其它程序可以识别的文件。
8. numpy的随机数函数
使用方式:np.random.*
如:np.random.rand()
(1)np.random的随机数函数(1)
注:(d0,d1,…,dn)是维度的形状,shape也表示维度的形状。
下面是例子
(2)np.random的随机数函数(2)
注:shuffle(a)和permutation(a)是根据数组a的第0轴进行随机排列,即最外围的轴(轴从0开始数)。choice()中replace的默认应该为True,表示可以重用元素。可能是上面的图片表述的有问题。
下面是例子:
(3)np.random的随机函数(3)
9. numpy的统计函数
使用方法:np.*
如:np.std()、np.var()等
(1) numpy的统计函数(1)
注:默认的axis=None表示对数组a中的所有元素进行统计,也可以指定axis从而只统计指定维度上的数据。
下面是例子:
(2)numpy的统计函数(2)
注:argmin(a)、argmax(a)求出来的下标是将数组a扁平化为一维数组之后的下标。
下面是例子:
注:np.median()求中位数是一种运算,它的结果是通过公式求得的,因此其结果是浮点数。
10. numpy的梯度函数
梯度:连续值之间的变化率,即斜率。
例如,XY坐标轴连续三个X坐标对应的Y轴值:a,b,c,则b的梯度是:(c-a)/2,即b的前一个值减去b的后一个值,再除于这两个值之间的距离。
如上图,第二个梯度值是2.5,它的计算方法是:(6-1)/2。
数组a中第二个值6存在两侧值。对于数组a中的第一个值和最后一个值,它们不存在两侧值,它们的计算方法如下:比如数组a中第一个元素1,它的梯度值为(6-1)/1=5,再比如数组a中最后一个元素7,它的梯度值为(7-4)/1。
对于二维元素:
np.gradient(b)返回的两个数组分别对应两个不同的维度,第一个数组表明元素在最外层维度的梯度值,即计算每一列的梯度值。第二个数组表明元素在第二层维度的梯度值。
注:以上内容摘抄总结自北京理工大学嵩天老师的慕课,以方便自己和大家查阅。