NumPy简介
NumPy:是高性能科学计算和数据分析的基础包。它是pandas等其他各种工具的基础
NumPy的主要功能:
1.ndarray,一个多维数组结构,高效且节省空间
2.无需循环对整组数据进行快速运算的数学函数
3.*读写磁盘数据的工具以及用于操作内存映射文件的工具
4.*线性代数、随机数生成和傅里叶变换功能
5.*用于集成C、C++等代码工具
例:
1.直接对所有数据进行运算
num_np = np.array([1,2,3,4,5])
加法运算
In []: num_np + 1
Out[]: array([2, 3, 4, 5, 6])
# 乘法运算
In []: num_np * 2
Out[19]: array([ 2, 4, 6, 8, 10])
2.求总销售额
import numpy as np
pice ,num= [1,2,3,4,5],[1,2,3,4,5]
price_np,num_np = np.array(pice),np.array(num)
#一步方式
np.dot(pice_np,num_np)
# 两步方式
mult_list = price_np*num_np
mult_list.sum()
使用方法
安装方法:pip install numpy
引用方法:import numpy as np(官方推荐引入方式)
NumPy:ndarray-多维数组对象
注意:
1.ndarray可以是多维数组
2.元素类型必须相同
创建ndarray:
np.array()
np.array([1,2,3,4,5,6]) # 一维数组
np.array([[1,2,3], [4,5,6]]) # 二维数组
np.arange(起点,终点,步长<可为小数>)
np.linespace(起点,终点,份数)
将起点到终点的直线,平均分为指定份数
np.zeros( np.shape<数组的形状>,dtype=np.dtype)
全为 0 的数组
np.ones( np.shape,dtype=np.dtype)
np.empty( np.shap)
取得一块内存,不修改内存中的值,体现为随机的值
np. eye( n ): n行n列的单位矩阵
ndarray运算
a = np.array([1,2,3,4,5,6])
b = np.array([1,2,3,4,5,6])
1. 加: a + 1 ,a + b
2.减: a - 1 , a - b
3.乘:a * 2 , a * b
4.除:a / 2 , a / b
5.乘方: a ** 2 , a ** b
6.布尔: a < 5 , a < b(返回布尔数组,对应位置返回 T or F)
ndarray索引
a = np.arange(15).reshape(3,5)
1. a[2][1] : 5
2. a[0,1] : 1
3.花式索引:
1.a[[1,2,4,7]] 选出a中第 1, 2 ,4,7个数字
2.a[ : ,[1,3]] 选出二维数组,第1列和第3列数据
4.布尔索引: a[ a< 5 ] ,a[a
注意:ndarray间运算需要形状相同
ndarray的运算为对数据列表中数据的运算,例如:a + 1 为[1+1,2+1,3+1……]
两个ndarray的运算为,两个列表对应位置的数据进行运算,例如:a + b 为[ 1+1,2+2,3+3 ……]
例:
1.a中小于5的偶数:
a[(a<5) & (a%2==0)]
注意: 因为运算级的问题,小括号不能省略
2.a中小于5的数字和偶数
a[(a<5) | (a%2==0)]
注意: 因为运算级的问题,小括号不能省略
ndarray切片
a = np.arange(15).reshape(3,5)
b = a[行起点:终点,列起点:终点]
注意:此处的切片不会复制数组(python中的会),即a,b指向同一个数组,b[0][0]修改后,a中数据也会变化(等同于浅拷贝)
若想要深拷贝,需要用 b = a[行起点:终点,列起点:终点].copy()
常用属性:
1.T 数组的转置(对高维数组而言)
num_np = np.array([[1,2,3],[4,5,6]])
In []: num_np
Out[]:array([[1, 2, 3]
[4, 5, 6]])
In []: num_np.T
Out[]:array([[1, 4],
[2, 5],
[3, 6]])
2.dtype
数组元素的数据类型
dtype:bool_(True or False), int(8,16,32,64), uint(8,16,32,64), float(16,32,64)
num_np = np.array([1,2,3,4,5])
In []: num_np.dtype
Out[]: dtype('int32')
转换数据类型:
num_np = np.array([1,2,3,4,5])
num_np = num_np.astype("float32")
In []: num_np
Out[]: array([1., 2., 3., 4., 5.], dtype=float32)
3.size 数组元素的个数
num_np = np.array([1,2,3,4,5])
In []: num_np.size
Out[]: 5
4.ndim 数组的维度
num_np = np.array([[1,2,3],[4,5,6]])
In []: num_np.ndim
Out[]: 2
5.shape 数组的维度大小(以元组形式表示数组的形状)
num_np = np.array([[1,2,3],[4,5,6]])
In []: num_np.shape
Out[]: (2, 3) # 二维数组为平面 (2行,3列)
改变数组形状:需保证元素个数前后相同
num_np = np.array([[1,2,3],[4,5,6]])
num_np.reshape( np.shape)
通用函数
四舍五入: np.round( a ) 或者 np.rint(a)
绝对值:abs
开根号:sqrt
向上取整:ceil
向下取整:floor
向0取整:trunc
分开整数和小数部分:a,b = np.modf(a) a接收小数部分,b接受整数部分
判断是否不是有效数据:isnan(不是数字)
取出有效数据 : a[~np.isnan[a]
判断是否为无限大:isinf(无限大)
取两个数组对应位置最大值:maximum(a,b) 取对应位置大的数组成数组
取两个数组对应位置最小值:minimum(a,b) 取对应位置小的数组成数组
求和:sum
累计求和:cumsum [1,2,3] --> [1,1+2,1+2+3]
求平均:mean
求标准差:std
求方差:var
求最小值:min
求最大值:max
求最小值索引:argmin
求最大值索引:argmax
随机数函数
给定形状生成(0-1)之间的数:np.random.rand(个数或shape)
给定形状生成给定取值范围随机整数:np.random.randint(下界,上界,个数或shape)
给定形状产生随机选择:np.random.choice([1,2,3],(2,3))
打乱列表:np.random.shuffle( ndarray )
给定形状产生随机整数:np.random.uniform(下界,上界,个数或shape)