-
Notifications
You must be signed in to change notification settings - Fork 0
Numpy
Starslayerx edited this page Apr 20, 2021
·
39 revisions
Numpy的基本对象: ndarray多维数组类型(n-dimensional array object),多维数组,是一个灵活快捷的python容器
import numpy as np| 函数 | 描述 |
|---|---|
| array | 将列表、元祖等类型转化为ndarray类型 |
| asarray | 同array,但若传如数据为ndarray则不会复制内存 |
| arange | (start, end, step)同python的range,不含end |
| ones | 根据给定数据大小,生成全1数组 |
| ones_like | 根据所给的数组大小,生成全1数组 |
| zeros | 全0数组 |
| zeros_like | |
| empty | 未初始化数组 |
| empty_like | |
| full | 生成指定数值的数组 |
| full_like | |
| eye | (a, b) 生成a x b大小特征矩阵 |
| identity | (a) 生成 a x a 大小特征矩阵 |
| linspace | (a, b, n) 从a到b平均产生n个数,含n |
| mgrid[a: b: nj] | 同上,使用复数j生成数组 |
ndarray对象和python列表不同点在于,ndarray中的对象必须都是同总类型的,而list不一定
| 属性 | 说明 |
|---|---|
| ndim | 维度 |
| shape | (m, n) 行列 |
| size | 元素总数 |
| dtype | 数据类型 |
| itemsize | 每个元素字节数 |
| 索引方式 | 说明 | 例子 |
|---|---|---|
| 普通索引 | 使用下表及切片访问元素 | a[1,2], a[[2,3], 1:3] |
| 布尔索引 | 使用和数组size相同的布尔数组 | a[~isnan(a)] |
| 神奇索引 | 将下表替换为列表访问: a[ [行], [列] ] | a[ [1:3], [4, 5] ] |
| 函数 | 说明 |
|---|---|
| delete | (a, n, axis=0/1) 删除数组a的第n行/列 |
| append | (a, [...], axis=0/1) 增加行或列 行列的写法: [行,这,样,写] [列],[这],[样],[写] |
| reshape | 返回相应形状视图 |
| reisze | 改变数组形状 |
| c_ | c_[a,b] 构造分块数组[a,b] |
| r_ | r_[a,b] 构造分块数组 |
| ravel | 返回水平展开数组视图 |
| flatten |
|
| hstack | ((a,b))横向结合数组a b |
| vstack | ((a,b))纵向结合数组a b |
| concatenate |
|
| dstack | ((a,b))深度组合a b |
| hsplit | 横向分割 |
| vsplit | 纵向分割 |
| split |
|
| dsplit | (a,n)深度分割数组 |
| tolist | 将数组转化为python列表 |
| a.T | 将数组a转置 |
| transpose() | 转轴 |
| swapaxes() | 换轴 |
- 一元通用函数
| 一元通用函数 | 说明 |
|---|---|
| abs fabs | 整数 浮点数的绝对值 |
| sqrt | |
| square |
|
| exp | |
| log log10 log2 log1p | |
| sign | 计算符号值1(正数) 0(0) -1(复数) |
| ceil | 最高整数值 |
| floor | 最小整数值 |
| rint | 保留整数 |
| modf(a/b) | [0:小数部分, 1:整数部分] |
| isnan | 是否为nan |
| isfinite isinf | 是否有限 是否无限 |
| cos cosh sin sinh tan tanh | 三角函数 |
| arccos arcsin arctan arccosh arcsinh arctanh | 反三角函数 |
| logical_not | ~ 按位取反 |
- 二元通用函数
| 函数 | 说明 |
|---|---|
| add | + |
| substract | - |
| divede floor_divide | / //(整除) |
| power | |
| maximum fmax | 取最大值 fmax忽略Nan |
| minimum fmin | 取最小值 fmin忽略Nan |
| mod | 取余数 |
| copysign | 将第二个数组符号给第一个数组 |
| greater greater_equal less less_equal equal not_equal logical_and logical_or logical_xor | > >= < <= == != & | ^ 用符号也可以 |
| 逻辑操作 | |
| where(bool表达式, a, b) | 根据布尔(数组)选择ab中的元素 |
| meshgrid() | 两个坐标轴上的点在平面上画网格 |
使用meshgrid()绘制网格
import matplotlib.pyplot as plt
import numpy as np
points = np.arange(-5, 5, 0.01)
xs, ys = np.meshgrid(points, points)
z = np.sqrt(xs ** 2, ys ** 2)
plt.imshow(z, cmap=plt.cm.gray)
plt.colorbar()
plt.title('Image plot of $\sqrt{x^2+y^2}$') 
- 数学统计方法
| 方法 | 描述 |
|---|---|
| sum | 元素和 (可选 axis=0/1) |
| std var | 标准差 方差(axis可选) |
| max min | 最大最小值(axis) |
| argmax argmin | 最大最小值的位置(axis) |
| cumsum | 从0开始累和(axis) |
| cumpord | 从1开始累乘(axis) |
- 布尔数组方法 布尔值会被强制为1和0,因此sum()可以计算布尔数组中True的个数
| 方法 | 描述 |
|---|---|
| any | 是否存在True |
| all | 是否都是True |
| sort | 排序(axis) |
| 集合操作 | |
| unique(x) | 计算x的唯一值,并排序 |
| intersect1d(x, y) | x y的交集,并排序 |
| union1d(x, y) | x y的并集,并排序 |
| 1n1d(x, y) | 判断x是否在y中,布尔数组 |
| setdiff1d(x, y) | x-y差集 |
| setxor1d(x, y) | 异或集 |
- 矩阵乘法(内积)
# 以下两种等价
x @ y
np.dot(x, y)- numpy.linalg 模块集成了许多线性代数的函数
| 函数 | 描述 |
|---|---|
| diag | 方阵的对角元素$\leftrightarrow$一维数组 |
| dot | 矩阵点乘 |
| trace | 对角元素和 |
| det | 矩阵行列式 |
| eig | 特征值 和 特征向量 |
| inv | 逆矩阵 |
| pinv | Moore-Penrose伪逆矩阵 |
| qr | QR分解 |
| svd | 奇异分解 |
| solve | 求解$Ax=b$,其中A为方阵 |
| lstsq | 计算$Ax=b$最小二乘解 |
| 函数 | 描述 |
|---|---|
| seed | 种子 |
| permutation | 返回一个序列的随机序列 |
| shuffle | 随即排列一个序列 |
| randint | 从给定范围抽取样本 |
| 分布函数 | |
| rand | 均匀分布随机样本 |
| uniform | 均匀[low,high)分布 |
| randn | 均值0方差1的正态分布 |
| normal | 正态(高斯)分布 |
| multivariate_normal | 多元正态分布 |
| binomial | 二项分布 |
| geometric | 几何分布 |
| hypergeometric | 超几何分布 |
| poisson | 泊松分布 |
| beta |
|
| chisquare | 卡方分布 |
| gamma | 伽玛分布 |
| lognormal | 对数正态分布 |
| multinomial | 多项式分布 |
- 文本文件读取
- savetxt() 和 loadtxt()
savetxt('file_name', array_name, fmt='%d', delimiter=',')
将数组存入文件
fmt = '%d'保存为整数格式 '%f'浮点数
delimiter = ',' 以逗号作为分隔符loadtxt('file_name') 读取文件,返回浮点型数组
- genfromtxt 读取文本文件数据
genfromtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None,
skip_header=0, skip_footer=0, converters=None, missing_values=None,
filling_values=None, usecols=None, names=None, excludelist=None,
deletechars=None, replace_space='-', autostrip=False, case_sensitive=True,
defaultfmt='f%i', unpack=None, usemask=False, loose=True, invalid_rise=True,
max_rows=None, encoding='bytes')| genfromtxt函数参数 | 解释 |
|---|---|
| fname | 文件名 |
| dtype | 读入数据类型,默认浮点型;若含有字符则要指定为str |
| comments | 指定注释符合 |
| delimiter | 数据分列隔符 |
| skip_header | 跳过行数(默认不跳过) |
| skip_footer | 跳过尾数(默认不跳过) |
| converters | 将指定列数据转化为其他值 |
| missing_values | 指定缺失值的标记 |
| filling_values | 指定缺失值的填充值 |
| usecols | 指定要读入的列 |
| names | 为读入列设置名称 |
| max_rows | 最大读入行 |
| encoding | 指定编码,若为中文要自行指定 |
- 二进制文件读取
-
tofile() 和 fromfile() tofile函数将数组以二进制形式写入文件,fromefile从二进制文件中读取数组
-
load() save() save() 这三个函数将数组存储为Numpy专用的格式
savez可以存入多个数组
savez(file_name, a, b, c, ...)
-
生成矩阵对象
M = np.mat() # 使用方法类似np.array() np.mat("1,2,3;4,5,6") # 也可以这样
-
矩阵与array的区别 对于矩阵对象,直接使用 * 就可以进行矩阵乘法,而array要使用np.dot()
-
特殊矩阵
M.T # 转置矩阵 M.H # 共厄矩阵 M.I # 逆矩阵