numpy(numerical Python) 是 Python 数值计算最重要的基础包,大多数提供科学计算的包都是用 NumPy 的数组为构建基础。
NumPy 可以用于数值计算的一个重要原因是因为他能处理大数组的数据:
- 在连续的内存块储存数据,独立于其他 Python 内置对象(C 语言编写的算法库,在 C 的基础上封装)
- 可以在整个数组上执行复杂的计算,不需要 for loop
速查
介绍
基本用法
NumPy 最重要的一个特点就是 ndarray(n 维数组对象,一个快速而灵活的大数据集容器)
Creating ndarray
python 默认创建数组的数据类型是浮点数(方便科学计算)
- np.array():
- 支持任何序列对象
- np.zeros()
- np.empty()创建一个数组,值可能为 0 有些情况下为垃圾值
- np.arrange():类似于内置的 range 返回一个
数组的数据类型
类型转换–np.astype
可以在创建数组时指定数值类型,也可以通过 np.astype()来转换数据类型(该函数会重新创建一个新的数组),除了用 np 里的数据类型,也可以用标准的数据类型,’<U4’好像是字符串。
import numpy as np |
数组形状
import numpy as np |
Basic Indexing and Slicing
- 索引利用’[]’,从 0 开始计数(相对于初始位置的偏移量)
- ':'的运用,左闭右开区间
- 切片产生的新数组仍然和原数组指向相同的储存位置(赋值操作)
- Boolean Indexing
import numpy as np |
- Fancy Indexing:直接使用数字表示行号进行索引查询
Where 函数
numpy.where
函数能返回数组中符合条件的元素索引,这一点在获取数据集中特定类别的全部样本时非常有用。
numpy.where(condition,x,y)
其中 condition 接收条件表达式,值为 bool 型,若为 True 返回 x,否则返回 y
下面的语句将返回所有特征值小于 10 的样本索引:
numpy.where(X[:,0]<10)
根据返回的样本索引,可以找到这些索引的所有样本,进行分类别可视化等任务。
数组拼接
行拼接
numpy.hstack()
列拼接
numpy.vstack()
numpy.concatenate((a1, a2, ...), axis=0)
可指定数组横向组合还是纵向组合。
一维 n 列数组拼接组合成 n 维坐标点
numpy.c_[]
np.meshgrid()
输入两个一维矩阵,输出二维坐标系(网格点)
读写文件
见文章
随机数生成
np.random 和内置 random 一样可以用来生成符合任意概率分布的**伪随机数,**内置的 random 一次只生成一个随机数(大样本下速度会慢很多)。之所以叫做伪随机数是因为这种随机数是根据随机数生成器的种子形成的。我们可以通过np.random.seed()
修改种子,这是一个全局变量。也可通过np.random.randomstate()
创建一个隔离其他种子的随机种子。
rng=np.random.RandomState(1234) |
Numpy 统计分析
排序
- 直接排序:
numpy.sort()
函数和numpy.ndarry.sort()
函数
arr.sort(a, axis=-1, kind=‘quicksort’, order=None) |
- 间接排序:
argsort
函数返回重新排序后数值的索引
arr.argsort(a,axis=-1, kind=‘quicksort’, order=None), |
lexsort
函数返回按照最后一个传入数据确定的排序顺序(相当于对多键值指定了 sort 函数的 kind 参数)
np.lexsort(a) |
去重和重复数据
去重:unique
函数可以找出数组中的唯一值并返回排序后的结果
np.unique(ar, return_index=False, return_inverse=False, |
ar 接收要去重的数组。对数组去重后,会把数组元素从小到大排列。
#例4-2. 数组元素去重 |
重复数据:
tile
函数可以重复数据
np.tile(A,reps),其中A指定重复的数组,reps指定重复的次数。 |
Repeat
函数可以重复数据
numpy.repeat(a,repeats, axis=None), |
其中 a 是需要重复的数组元素,repeats 是重复次数,axis 指定沿着哪个轴进行重复,
axis= 0 表示按行进行元素重复;axis= 1 表示按列进行元素重复。
- tile 函数是对数组进行重复操作,repeat 函数是对数组中的每个元素进行重复操作
描述性统计
- 和——
ndarray.sum(axis=None, dtype=None, out=None, keepdims=False)
- 均值——
ndarray.mean(axis=None, dtype=None, out=None, keepdims=False)
- 标准差——
ndarray.std(axis=None, dtype=None, out=None, ddof=0, keepdims=False)
- 方差——
ndarray.var(axis=None, dtype=None, out=None, ddof=0, keepdims=False)
- 最小值——
ndarray.min(axis=None, out=None, keepdims=False)
(返回索引) - 最大值——
ndarray.max(axis=None, out=None, keepdims=False)
(返回索引) - 累计和——
ndarray.cumsum(axis=None, dtype=None, out=None)
- 累计积——
ndarray.cumprod(axis=None, dtype=None, out=None)
- 中位数——
numpy.median(a, axis=None, out=None, overwrite_input=False, keepdims=False)
- 极差——
numpy.pad(array, pad_width, mode, **kwargs)
- 协方差——
numpy.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)
各函数中 axis 表示计算的范围,默认为 None,表示对全部元素进行计算。axis=1 表示沿横轴,axis=0 表示沿纵轴。
集合运算
Linear Algebra
点乘:
- x.dot(y)
- np.dot(x,y)
- x@y
矩阵分解(逆矩阵和矩阵的值)
高级用法
生成模拟数据集
使用 NumPy 的随机函数、等差数组生成函数,生成需要的数据。由于生成的函数通常是一维数组,所以还需要进行数组的拼接:横向拼接实现多个特征(包括类标签)的组合;纵向拼接实现多个类别的组合。
借助行列拼接生成分类数据集
#在二维平面内创建不同位置为中心,产生正态分布的样本点 |
借助np.c[]
生成线性回归样本集。
#例5-3,生成多元线性回归数据集 |
Expressing Conditional Logic as Array Operations
相比于普通的条件循环,NumPy 能够依据其自身特点大大加快运算速度,因此我们有必要使用 NumPy 的表达来代替平时的条件逻辑。
import numpy as np |