Skip to content
Starslayerx edited this page Apr 20, 2021 · 39 revisions

green-pi
Numpy
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 $\uparrow$
empty 未初始化数组
empty_like $\uparrow$
full 生成指定数值的数组
full_like $\uparrow$
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] 构造分块数组 $[^a_b]$
ravel 返回水平展开数组视图
flatten $\uparrow$ 但会重新分配空间
hstack ((a,b))横向结合数组a b
vstack ((a,b))纵向结合数组a b
concatenate $\uparrow$ ((a,b),axis=0/1)
dstack ((a,b))深度组合a b
hsplit 横向分割
vsplit 纵向分割
split $\uparrow$ ((a,b),axis=0/1)
dsplit (a,n)深度分割数组
tolist 将数组转化为python列表
a.T 将数组a转置
transpose() 转轴
swapaxes() 换轴

数组运算

  • 一元通用函数
一元通用函数 说明
abs fabs 整数 浮点数的绝对值
sqrt $\sqrt{}$
square $^2$ 平方
exp $e^x$
log log10 log2 log1p $ln\ lg\ log_2\ log_{(1+x)}$
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 $a^b$
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}$')  

$\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 $beta$分布
chisquare 卡方分布
gamma 伽玛分布
lognormal 对数正态分布
multinomial 多项式分布

文件读取

  1. 文本文件读取
  • 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 指定编码,若为中文要自行指定
  1. 二进制文件读取
  • 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    # 逆矩阵