Python中numpy
Numpy是一个开源的Python科学计算基础库
以下学习自中国大学MOOC 嵩天 《Python数据分析与展示》
一.Numpy库入门
1.Numpy的引入
import numpy as np
使用别名可以缩短在程序中导入numpy方法的长度,np
为约定名
2.N维数据对象:ndarray
- 数组对象可以去掉元素运算所需的循环,使一维向量更像单个数据
- 设置专门的数组对象可以提升此类应用的运算速度
- 数组对象采用相同的数据类型,可以帮助节省运算和存储空间
- 程序中别名为
array
3.ndarray对象的属性
属性 |
含义 |
.ndim |
维度的数量 |
.shape |
ndarray对象的尺度,n行m列 |
.size |
ndarray对象的个数,其.shape 中n*m |
.dtype |
ndarray对象的元素类型 |
.itemsize |
ndarray对象中每个元素的大小,以字节为单位 |
3.ndarray对象的元素类型
数据类型 |
说明 |
bool |
布尔类型,True或False |
intc |
与C语言中的int类型一致,一般是int32或int64 |
intp |
用于索引的整数,与C语言中ssize_t一致,int32或int64 |
int8 |
字节长度的整数,取值:[‐128, 127] |
int16 |
16位长度的整数,取值:[‐32768, 32767] |
int32 |
32位长度的整数,取值:[‐231 , 231 ‐1] |
int64 |
64位长度的整数,取值:[‐263 , 263 ‐1] |
uint8 |
8位无符号整数,取值:[0, 255] |
uint16 |
16位无符号整数,取值:[0, 65535] |
uint32 |
32位无符号整数,取值:[0, 232 ‐1] |
uint64 |
32位无符号整数,取值:[0, 264 ‐1] |
float16 |
16位半精度浮点数:1位符号位,5位指数,10位尾数 |
float32 |
32位半精度浮点数:1位符号位,8位指数,23位尾数 |
float64 |
64位半精度浮点数:1位符号位,11位指数,52位尾数 |
complex64 |
复数类型,实部和虚部都是32位浮点数 |
complex128 |
复数类型,实部和虚部都是64位浮点数 |
这么多种的元素类型的存在因为:
- 科学计算数据繁多,存储和性能要求极高
- 有利于合理使用存储空间以及优化性能
二.ndarray数组的建立
1.使用原始结构类型创建
# 通过列表创建ndarray
a = np.array([1,2,3,4,5,6])
print(a)
# 通过元组创建ndarray
b = np.array((1,2,3,4,5,6))
print(b)
2.使用numpy函数创建
常规方法
函数 |
说明 |
np.arange(n) |
类似range()函数,返回ndarray类型,元素从0到n‐1 |
np.ones(shape) |
根据shape生成一个全1数组,shape是元组类型 |
np.zeros(shape) |
根据shape生成一个全0数组,shape是元组类型 |
np.full(shape,val) |
根据shape生成一个数组,每个元素值都是val |
np.eye(n) |
创建一个正方的n*n单位矩阵,对角线为1,其余为0 |
进阶方法
函数 |
说明 |
np.ones_like(a) |
根据数组a的形状生成一个全1数组 |
np.zeros_like(a) |
根据数组a的形状生成一个全0数组 |
np.full_like(a,val) |
根据数组a的形状生成一个数组,每个元素值都是val |
np.linspace() |
根据起止数据等间距地填充数据,形成数组 |
np.concatenate() |
将两个或多个数组合并成一个新的数组 |
三.ndarray数组的变换
1.维度变换
方法 |
说明 |
.reshape(shape) |
不改变数组元素,返回一个shape形状的数组,原数组不变 |
.resize(shape) |
与.reshape()功能一致,但修改原数组 |
.swapaxes(ax1,ax2) |
将数组n个维度中两个维度进行调换 |
.flatten() |
对数组进行降维,返回折叠后的一维数组,原数组不变 |
实例:
创建一个三维数组a
.reshape(shape)
不修改原数组
.resize(shape)
修改原数组
.swapaxes(ax1,ax2)
二维数组:
三维数组:
.flatten()
将原数(原数组维度>1)组降维,一维还是原数组
2.类型变换
b = a.astype(new_type)
3.数组向列表的转换
a_list = a.tolist()
四.ndarray数组的操作(索引与切片)
1.一维数组(同列表)
2.多维数组
两个逗号隔开三个维度,分别进行操作
五.数组与标量之间的运算
数组与标量之间的运算作用于数组的每一个元素
一原函数
方法 |
说明 |
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.cosh(x) 、np.sin(x) 、 np.sinh(x) 、np.tan(x) 、np.tanh(x) |
计算数组各元素的普通型和双曲型三角函数 |
np.exp(x) |
计算数组各元素的指数值 |
np.sign(x) |
计算数组各元素的符号值,1(+), 0, ‐1(‐) |
二原函数
方法 |
说明 |
+ ‐ * / ** |
两个数组各元素进行对应运算 |
np.maximum(x,y) np.fmax() |
元素级的最大值/最小值计算 |
np.mod(x,y) |
元素级的模运算 |
np.copysign(x,y) |
将数组y中各元素值的符号赋值给数组x对应元素 |
> < >= <= == != |
算术比较,产生布尔型数组 |
原数组:
部分实例: