Numpy
Numpy是一个开源的python科学计算基础库
- 一个强大的N维数组对象ndarray
- 广播功能函数
- 整合C/C++/Fortran代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
Numpy是SciPy、Pandas等数据处理或科学计算库的基础。
Numpy的引用:
Import numpy as np
Ndarray
N维数组对象:ndarray
- 数据对象可以去掉元素间运算所需的循环,使一维向量更像单个数据。
- 设置专门的数组对象,可以提升运算速度。
- 数组对象采用相同的数据类型,有助于节省运算和存储空间。
- ndarray是一个多维数组对象,由两部分构成:
- 实际的数据
- 描述这些数据的元数据(数据维度、数据类型等)
- ndarray一般要求所有元素类型相同(同质),数组下标从0开始。
- 可以用np.array()生成一个ndarray数组,输出成[ ]形式,元素由空格分割
轴(axis):保存数据的维度
秩(rank):轴的数量
ndarray对象的属性:
- ndim 秩,即轴的数量或维度的数量
- shape ndarray对象的尺度,对于矩阵来说即是n行m列
- size ndarray对象元素的个数,相当于.shape中n*m的值
- dtype ndarray对象的元素类型
- itemsize ndarray对象中每个元素的大小,以字节为单位
两个维度:每个维度有5个元素
共有10个元素
元素为int32类型
每个元素占4个字节
ndarray的元素类型(众多):
- 科学计算设计的数据较多,对存储和性能都有较高要求。
- 对元素类型的精细定义,有助于NumPy合理使用存储空间并优化性能。
- 对元素类型精细定义,有助于程序员对程序规模有合理评估。
- ndarray数组也可以有非同质对象构成,非同质ndarray元素为对象类型,无法有效发挥numpy的优势,尽量避免使用。
只能看到两个元素,不能进一步分析
O为对象类型,非同质ndarray元素为对象类型。
Object类型即把两个列表看作两个类型
Ndarray数组的创建
- 从python中的列表、元组等类型创建ndarray数组。
x = np.array(list/tuple)
x = np.array(list/tuple,dtype=np.float32)
当np.array()不指定dtype时,NumPy将根据数据情况关联一个dtype类型。
- 使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等。
1.1 np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n-1
1.2 np.ones(shape) 根据shape生成一个全1数组,shape是元组类型 n行m列
1.3 np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型 n行m列
1.4 np.full(shape,val) 根据shape生成一个数组,每个元素值都是val n行m列
1.5 np.eye(n) 创建一个正反的n*n单位矩阵,对角线为1,其余为0
(2,3,4)由最外层到最内层的逐渐变化的数据维度的表示方式
1.6 np.ones_like(a) 根据数组a的形状生成一个全1数组
1.7 np.zeros_like(a) 根据数组a的形状生成一个全0数组
1.8 np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val。
1.9 np.linspace() 根据起止数据等间距的填充数据,形成数组
第一个参数为起始元素的值,第二个参数为结束元素的值,第三个参数为等间距分成四个元素
endpoint参数表示结束元素(即10)是否作为生成的4个元素中的1个
1.10 np.concatenate() 将两个或多个数组合并成一个新的数组
- 从字节流(raw bytes)中创建ndarray数组。
- 从文件中读取特定格式,创建ndarray数组。
ndarray数组的变换
- .reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
保持元素的总体个数保持不变。
但是a却没有发生变化。
- .resize(shape) 与.reshape()功能一致,但修改原数组
原数组a被改变 - .swapaxes(ax1,ax2) 将数组n个维度中的两个维度进行调换
- .flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
原数组a不变,a.flatten()降维成一位数组
ndarray数组的类型变换
- new_a=a.astype(new_type) .astype()方法一定会创建一个新的数组(原始数据的一个拷贝),即使两个类型一致
ndarray数组向列表的转换
- .tolist() 由ndarray数组转换为列表
ndarray数组的操作
- 数组的索引和切片
索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程
一维数组的索引和切片:与python的列表类似
3元素冒号分割:[起始:终止(不包含):步长]
多维数组的索引:每个维度一个索引,之间用逗号分隔
-1表示倒数第一个元素值,-2表示倒数第二个…但正着数是由0开始
多维数组的切片:
通过 “:” 可以选取一整个维度,维度内也能够进行切片操作
例中:
第二个维度上取1~3(起始为1终止为3不含3的值)
每个维度可以使用步长跳跃切片,在第三个维度中步长为2选取元素,即获得了第三个维度的一半的元素。
- ndarray数组的运算
- 数组与标量之间的运算
数组与标量之间的运算作用于数组的每一个元素
.mean()为求数组的平均值
- NumPy一元函数对ndarray中的数据执行元素级运算的函数
- np.abs(x)和np.fabs(x) 计算数组各元素的绝对值
- np.sqrt(x) 计算数组各元素的平方根
- np.square(x) 计算数组各元素的平方
- np.log(x)和np,log10(x)和np.log2(x) 计算数组各元素的自然对数、10底对数、2底对数
- np.ceil(x)和np.floor(x) 计算数组各元素的ceiling值、floor值
- np.rint(x) 计算数组各元素的四舍五入值
- np.modf(x) 将数组各元素的小数和整数部分以两个独立数组形式返回,即使是整数部分在数组中也是以浮点数表示
- np.cos(x) np.sin(x) np.tan(x) np.cosh(x) np.sinh(x) np.tanh(x) 计算数组各元素的普通型和双曲型三角函数
- np.exp(x) 计算数组各元素的指数值
- np.sign(x) 计算数组各元素的符号值,1(+) ,0, 1(-)
几乎所有一元函数运算都是新生成数组,原数组并不改变。
- NumPy二元函数
- “+” “-” “*” “/” ”** 这些运算都是两个数组各元素进行对应运算
- np.maximum(x,y) np.fmax() 元素级的最大值计算
np.minimum(x,y) np.fmin() 元素级的最小值运算 - np.mod(x,y) 元素级的模运算
- np.copysign(x,y) 将数组y中各元素的符号赋值给数组x对应元素
- “>” “<” “>=” “<=” “==” “!=” 算数比较,产生布尔型数组
单元小结:
- 数据的维度:一维、二维、多维、高维
- ndarray类型属性、创建和变换
- 数组的索引和切片方式
- 数组的运算:一元函数、二元函数