
开源的科学计算基础库
本篇文章参考中国大学MOOC嵩天老师的课程:python数据分析与展示
一维数组
二维数据
多维数据
高维数据
数据对象特点
关于ndarray
ndarray对象的属性
| 属性 | 描述 |
|---|---|
| .ndim | 秩 |
| .shape | 对象的形状,对应矩阵的n行m列 |
| .size | 对象元素的个数 |
| .dtype | 对象中元素类型 |
| .itemsize | 对象中每个元素的大小,以字节为单位 |
ndarray对象的意义
创建方法
| 函数 | 描述 |
|---|---|
| numpy.arange(n) | 返回ndarray类型,元素从0到1 |
| ones(shape) | 生成一个全1的数组, |
| zeros(shape) | 生成一个全0的数组 |
| full(shape,val) | 根据shape生成一个数组,每个元素都是val |
| eye(n) | 生成一个正方n*n的单位矩阵,对角线为1,其余为0 |
| ones_like(a) | 根据a的形状生成一个全1的数组 |
| zeros_like(a) | 根据a的形状生成一个全0的数组 |
| full_like(a,val) | 根据a的形状生成一个每个元素都是val的数组 |
| 函数 | 描述 |
|---|---|
| linspace() | 根据起止数据等间距填充数据形成数组 |
| concatenate() | 将两个或多个数组合并成一个新的数组 |
对于创建后的数组进行维度变换或元素类型变换
维度变换
| 方法 | 描述 |
|---|---|
| reshape(shape) | 不改变数组元素,返回一个shape形状的数组,不改变原数组 |
| resize(shape) | 与reshape功能相同,改变原数组 |
| swapaxes(ax1,ax2) | 将数组两个维度调换 |
| flatten() | 对数组降维,返回折叠后的一维数组,原数组不变 |
下面我们来看看这些方法的作用
类型转换
| 函数 | 描述 |
|---|---|
| .astype(newtype) | 创建新的数组,数据相同,类型也可能相同 |
| .tolist() | 数组向列表转换 |
从下面的例子中我们可以看出,转换数组元素的类型时并未改变原数组,此外,如果参数newtype使用numpy中的数据类型时未知名精度,程序会提出警告
下面我们生成一个列表
索引和切片
一维数组索引
多维数组索引
多维数组切片
数组与标量之间的运算
数组中的每一个元素参与运算
一元函数
对数组中的数据执行元素级运算
| 函数 | 描述 |
|---|---|
| np.abs(x) /np.fabs(x) | 求数组x各元素的绝对值 |
| np.sprt(x) | 求数组x中各元素平方根 |
| np.square(x) | 各元素平方 |
| np.logn(x)(n为底数) | 求各元素对数值 |
| np.ceil(x) | 求各元素ceiling值 |
| np.rint(x) | 各元素四舍五入的值 |
| np.modf(x) | 将各元素小数部分和整数部分分为两个独立的数组返回 |
| np.sin()/cos()… | 各元素的三角函数值 |
| np.exp(x) | 各元素指数值 |
| np.sign(x) | 各元素符号值,-1(-),0,1(+) |
二元函数
两个数组之间的元素运算
| 函数描述 | |
|---|---|
| +、-、*、/、** | 两个数组各元素对应进行运算 |
| np.copysign(x,y) | 将y中各元素符号赋值给数组x对应的元素 |
| <、>、<=、>=、!=、== | 算术比较,产生布尔类型 |
| np.mod(x,y) | 元素级模运算 |
语法格式:np.savetxt(frame,array,format,delimiter)
| 参数 | 描述 |
|---|---|
| frame | 文件(可以是压缩文件),字符串或产生器 |
| array | 存入文件的数组 |
| format | 写入文件的格式,如%d,%f |
| delimiter | 分割字符串,默认空格 |
打开文件我们可以看到里面的数据
语法格式2:np.loadtxt(frame,dtype,delimiter,unpack)
| 参数 | 描述 |
|---|---|
| frame | 文件(可以为压缩文件),字符串或产生器 |
| dtype | 数据类型 |
| delimiter | 分割字符串 |
| unpack | 为True时,读入变量被写入不同属性 |
多维数据存储
语法格式:array.tofile(frame,sep,format)
| 参数名 | 描述 |
|---|---|
| frame | 文件,字符串 |
| seq | 分割字符串 |
| format | 写入文件的数据格式,如%d |
多维数据读取
语法格式:np.fromfile(frame,dtype,count,sep)
| 参数 | 描述 |
|---|---|
| frame | 文件,字符串 |
| dtype | 读取数据类型 |
| count | 读入元素个数 |
| sep | 数据分割字符串 |
这种方法存取时需要知道存入文件时数组的维度和元素类型3
案例3:存储并读取一个包含维数据的文件 随机数函数np.random的随机数函数
| 函数 | 描述 |
|---|---|
| rand(d0,d1,…dn) | 根据d0-dn创建随机数数组,浮点数,范围[0,1),均匀分布 |
| randn(d0,d1…dn) | 根据d0-dn创建随机数函数,正态分布 |
| ranint(low,high,shape) | 根据shape创建随机整数,范围为(low,high) |
| seed(s) | 随机数种子s |
| shuffle(a) | 根据数组第一个轴随机排列,改变原数组 |
| permutation(a) | 根据数组第一个轴随机排列,不改变原数组 |
| choice(a[,size,replace,p]) | 从一维数组中以概率p抽取元素,形成size形状的新数组,replace代表是否可以重用元素,默认Flase |
| uniform(low,high,size) | 产生具有均匀分布的数组,范围(low,high),size代表形状 |
| normal(loc,scale,size) | 产生具有正态分布的数组,loc代表均值,scale代表标准差,size代表形状 |
| poisson(lam,size) | 产生具有泊松分布的数组,lam代表随机事件发生率,size代表形状 |
下面我们对生成的数组进行变化
下面我们分别生成具有均匀分布和正态分布特征的数组
| 函数 | 描述 |
|---|---|
| sum(a,axis) | 根据axis 计算数组a中相关元素之和 |
| mean(a,axis) | 根据axis计算数组a相关元素期望 |
| average(a,axis,weights) | 根据axis计算数组a相关元素加权平均值 |
| std(a,axis) | 根据axis计算数组a相关元素标准差 |
| var(a,axis) | 根据axis计算数组a相关元素方差 |
| min(a)/max(a) | 计算数组中的最小/最大元素 |
| argmin(a)/argmax(a) | 数组中最小/最大元素降一维对应的下标 |
| unravel_index(index,shape) | 将一维坐标转换为多维shape状 |
| ptp(a) | 数组中最小和最大元素数值之差 |
| median(a) | 数组中元素的中位数 |
下面我们尝试获得数组中的最小和最大值
| 函数 | 描述 |
|---|---|
| np.gradient(f) | 计算数组f中元素的梯度,当f为多维,返回每个维度的梯度1 |
梯度是连续值之间的变化率,即斜率 ↩︎ ↩︎
注意:
1, csv只能有效存储一维和二维数据
2, np中的存储和读取函数都只能有效存储一维和二维数据 ↩︎
多维数据存储(tofile()函数)和读取方法(fromfile()函数)需要配合使用,可以通过元数据文件来存储额外信息 ↩︎