介绍
Numpy(Numerical Python)是一个开源的Python科学计算库,用于快速处理任意维度的数组。
Numpy支持常见的数组和矩阵操作。对于同样的数值计算任务,使用Numpy比直接使用Python要简洁的多。
Numpy使用ndarray对象来处理多维数组,该对象是一个快速而灵活的大数据容器。
优势
(1)内存地址连续,所有元素数据类型相同
(2)支持并行化运算
(3)解除了GIL限制
常用属性
属性名字 | 属性解释 |
---|---|
ndarray.shape | 数组维度的元组 |
ndarray.ndim | 数组维数 |
ndarray.size | 数组中的元素数量 |
ndarray.itemsize | 一个数组元素的长度(字节) |
ndarray.dtype | 数组元素的类型 |
常用方法
1、np.ones(shape, dtype):生成全1的数组
2、np.ones_like(a, dtype):生成和a相同形状的数组
3、np.zeros(shape, dtype):生成全0数组
4、np.zeros_like(a, dtype):生成和a相同形状数组
5、np.array(object, dtype):从列表生成数组
6、np.asarray(a, dtype):如果是列表,则创建新的ndarray,如果a是ndarray,则不会创建新的空间
等差数组
np.linsapce(start, stop, num, endpoint)
np.arange(start,stop, step, dtype)
等比数组
np.logspace(start,stop, num)
生成随机数组
标准正态分布:np.random.randn()
正态分布:np.random.normal(μ,σ)
均匀分布:np.random.rand()
np.random.uniform()
np.random.randint()
形状修改
ndarray.reshape()
:返回一个新的ndarray
ndarray.resize()
:在自身修改
ndarray.T
:转置
类型修改
ndarray.astype()
:返回修改类型之后的数组
数组去重
np.unique(ndarray)
数组运算
ndarray > 60
:返回布尔类型的数组
ndarray[ndarray>60]
:返回为True的元素
np.all()
:所有都为True返回True
np.any()
:有一个为Ture返回True
np.where()
:三元运算符
np.logical_and()
:逻辑与
np.logical_or()
:逻辑或
统计函数
方法 | 说明 |
---|---|
min(a, axis) | 返回数组的最小值或沿轴的最小值 |
max(a, axis]) | 返回数组的最大值或沿轴的最大值 |
median(a, axis) | 计算沿指定轴的中位数 |
mean(a, axis, dtype) | 沿指定轴计算算术平均值 |
std(a, axis, dtype) | 沿指定轴计算标准偏差 |
var(a, axis, dtype) | 沿指定轴计算标方差 |
np.argmax(axis=) | 最大元素对应的下标 |
np.argmin(axis=) | 最小元素对应的下标 |
广播机制
数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样,就可以进行矢量化运算了。
广播主要发生在两种情况,一种是两个数组的维数不相等,但是它们的后缘维度的轴长相符,另外一种是有一方的长度为1。
eg:
arr1 = np.array([[1, 2, 3, 2, 1, 4], [5, 6, 1, 2, 3, 1]])
arr2 = np.array([[1], [3]])
print(arr1+arr2)
# 结果
# array([[2, 3, 4, 3, 2, 5],
# [8, 9, 4, 5, 6, 4]])
矩阵运算
(M行, N列)*(N行, L列) = (M行, L列)
np.matmul()
:矩阵乘
np.dot
:矢量运算是相同,支持矢量和标量