Numpy
文章目录
1.Numpy优势
- 开源的python科学计算库,用于快速处理任意维度的数组Numpy中,存储对象是ndarray
- 创建np.array([])
- 内存块风格 – 一体式存储
- 支持并行化运算
- 效率高于纯python代码–内部释放了GIL
2.N维数组-ndarray
1.ndarray的属性
属性名字 | 属性解释 |
---|---|
ndarray.shape | 数组维度的元组 |
ndarray.ndim | 数组维数 |
ndarray.size | 数组中的元素数量 |
ndarray.itemsize | 一个数组元素的长度(字节) |
ndarray.dtype | 数组元素的类型 |
2.ndarray的形状
np.array()
3.ndarray的类型
bool、int、float、str…
若不指定,整数默认int64,小数默认float64
3.基本操作
3.1.生成数组方法
1.生成0和1的数组
- np.ones()
- np.ones_like()
- np.zeros()
- np.zeros_like()
import numpy as np
a=np.ones((3,5))
a
b=np.zeros_like(a)
b
2.从现有数组中生成
- np.array() – 深拷贝(相当于复制现有的数组,不会因为上边数组的变化而变化
- np.asarray() – 浅拷贝(会因为现有数组的数据变化而变化)
3.生成固定范围数组
- np.linspace(start,stop,num,dtype)
- num – 生成等间隔的多少个
np.linspace(0,100,9,float)
- np.arange(start,stop,step,dtype)
- step – 每间隔多少生成数据
np.arange(0,100,9,float)
- np.logspace(start,stop,num,endpoint)
np.logspace(0,3,num=5)
- 生成随机数组
- 均匀分布生成
- np.random.uniform(low,high,size)
- low – 最小值
- high – 最大值
- size – 数组形状
a=np.random.uniform(0,2,(5,9))
- 正态分布
- np.random.normal(loc,scale,size)
- loc – 均差
- scale – 方差
- size – 数组形状
在这里插入代码片
案例:
import matplotlib.pyplot as plt
import numpy as np
x=np.random.normal(5,0.2,100000000)
plt.figure(figsize=(20,8),dpi=100)
plt.hist(x,bins=1000)
plt.show()
生成图像:
3.2数组的索引、切片
直接索引
先对行进行索引,在进行列索引
高维数组索引,从宏观到微观
3.3形状修改
1.对象.reshape()
- 不进行行列互换,产生新变量
2.对象.resize()
- 不进行行列互换,直接对原值进行更改
3.对象.T() - 转置,进行行列互换
import numpy as np
a=np.random.normal(48,0.6,(5,4))
print(a)
print(a.reshape([4,5]))
print(a.reshape([-1,10]))
print(a.resize([4,5]))
print(a.T)
3.4类型修改
对象.astype()
3.5数组去重
np.unique()
4.ndarray运算
4.1逻辑运算
- 大于、小于直接进行判断
- 赋值:满足要求进行赋值,a[a>1]=2
4.2通用判断函数
- np.all()
所有满足要求,才返回True - np.any()
只要有一个满足要求,才返回True
4.3三元运算符
- np.where()
满足要求,赋值第一个值,否则赋值第二个值 - np.logical_and()
并 - np.logical_or()
或
4.4统计运算
- .min() – 最小值
- .max() – 最大值
- .median() – 中位数
- .mean() – 平均值
- .std() – 标准差
- .var() – 方差
import numpy as np
b=np.random.normal(5,0.3,(5,4))
b1=b[:3,:3]
b1>4.8 #逻辑运算
b1[b1>4.8]=5 #赋值
b1
np.any(b1>4.5)
np.all(b1>8)
np.where(b1>4.8,4,3) #b1中大于4.8的元素赋值为4,否则赋值为3
np.logical_and(b1>3.5,b1<5)
np.logical_or(b1>4,b1<5)
b1.min(axis=1) #求每一行最小值
b1.max(axis=0) #求每一列最大值
5.矩阵
5.1数组间的运算
1.数组和数字是直接可以进行运算
2.数组和数组
需要满足广播机制、维度相同、shape对应位置为1
5.2矩阵乘法
- np.dot() – 点乘
- np.matmul() – 矩阵相乘
- 两个矩阵在进行相乘时上边两个没有区别,但dot支持矩阵和数字相乘,matmul不支持