Numpy 是一个开源的 Python 科学计算库,它是 python 科学计算库的基础库,许多其他著名的库(如 Pandas 、Scikit-learn 等)都要用到 Numpy 库的一些功能。Numpy 常用的导入格式:import numpy as np
1. 创建数组对象
NumPy 库能将数据(列表、元组、数组或其他序列类型)转换为 ndarray 数组。
- 利用 array 函数创建数组对象
- 专门创建数组的函数
- NumPy 创建的 ndarray 对象属性,主要有 shape 、size 等属性
2. 生成随机数
在 NumPy.random 模块中,提供了多种随机数的生成函数。如 randint 生成指定范围的随机整数。
np.random.randint(low,high = None,size = None)
3. 生成随机函数
4. 数组变换
4.1 数组重塑
reshape,与 reshape 相反的方法是数据散开(ravel)或数据扁平化(flatten)
数据重塑不会改变原来的数
arr1 = np.arange(12)
print('arr1:\n',arr1)
arr1:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
# a.reshape(m,n)表示将原有数组a转化为一个m行n列的新数组,a自身不变
arr2 = arr1.reshape(3,4)
print('arr2:\n',arr2)
arr2:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
# reshape(m,n)中参数m或n其中一个可写为"-1",作用为计算机根据原数组中的元素总数自动计算行或列的值
arr3 = arr1.reshape(2,-1)
print(arr3)
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]
4.2 数组合并
完成数组的组合,包括数组的横向组合和纵向组合。
NumPy 利用 hstack、vstack 和 concatenate 函数完成数组的组合。
- 横向组合利用 hstack 函数。将 ndarray 对象构成的元组作为参数,传给 hstack 函数
arr1 = np.arange(6).reshape(3,2)
arr2 = arr1 * 2
arr3 = np.hstack((arr1,arr2))
print('横向合并:\n',arr3)
横向合并:
[[ 0 1 0 2]
[ 2 3 4 6]
[ 4 5 8 10]]
- 纵向组合是利用 vstack 将数组纵向合并。
arr4 = np.vstack((arr1,arr2))
print('纵向合并:\n',arr4)
纵向合并:
[[ 0 1]
[ 2 3]
[ 4 5]
[ 0 2]
[ 4 6]
[ 8 10]]
- concatenate 函数可以实现数组的横向或纵向合并,参数 axis=1 时进行横向合并,axis=0 时进行纵向合并。
4.3 数组分割
实现数组的横向、纵向和指定方向的分割
与数组合并相反,NumPy 提供了 hsplit 、vsplit 和 split 分别实现数组的横向、纵向和指定方向的分割。
arr = np.arange(16).reshape(4,4)
print('横向分割为:\n',np.hsplit(arr,2))
print('纵向分割为:\n',np.vsplit(arr,2))
横向分割为:
[array([[ 0, 1],
[ 4, 5],
[ 8, 9],
[12, 13]]), array([[ 2, 3],
[ 6, 7],
[10, 11],
[14, 15]])]
纵向分割为:
[array([[0, 1, 2, 3],
[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],
[12, 13, 14, 15]])]
- 同样,split 在参数 axis=1 时实现数组的横向分割,axis=0 时则进行纵向分割。
4.4 数组转置和轴对换
数组转置是数组重塑的一种特殊形式,可以通过 transpose 方法进行转置。transpose 方法需要传入轴编号组成的元组。
- 除了使用transpose外,可以直接利用数组的T属性进行数组转置。
5. 数组的索引和切片
一维数组的索引和切片
- 一维数组的切片和索引与 python 的 list 索引类似
多维数组的索引
- 对于多维数组,它的每一个维度都有一个索引,各个维度的索引之间用逗号分隔。也可以使用整数函数和布尔值索引访问多维数组。
6. 数组的运算
数组的运算支持向量化运算,将本来需要在 Python 级别进行的运算,放到 C 语言的运算中,明显地提高了程序的运算速度。
- 数组和标量间的运算
- ufunc 函数
常用的 ufunc 函数运算有四则运算、比较运算和逻辑运算。
np.any 函数表示逻辑 "or",np.all 函数表示逻辑 "and" 。
- ufunc函数的广播机制
广播(broadcasting)是指不同形状的数组之间执行算术运算的方式。
7. 条件逻辑运算
在 NumPy 中可以利用基本的逻辑运算就可以实现数组的条件运算。
这种方法对大规模数组处理效率不高,也无法用于多维数组。NumPy 提供的 where 方法可以解决这些问题。
# 满足条件(condition),输出x,不满足则输出y
np.where(condition,x,y)
8. NumPy 中的数据统计与分析
8.1 排序
numpy.sort(a, axis, kind, order)
使用 argsort 和 lexsort 函数,可以在给定一个或多个键时,得到一个由整数构成的索引数组,索引值表示数据在新的序列中的位置。
8.2 重复数据与去重
在数据统计分析中,需要提前将重复数据剔除。在 NumPy 中,可以通过 unique 函数找到数组中的唯一值并返回已排序的结果。
8.3 常用统计函数
NumPy中提供了很多用于统计分析的函数,常见的有 sum、mean、std、var、min 和 max 等。
几乎所有的统计函数在针对二维数组的时候需要注意轴的概念。