################## NumPy ##########################
NumPy的数组类被称作ndarray
####### 常用属性 ########
X.flags #数组的存储情况信息。
X.shape #结果是一个tuple,返回本数组的行数、列数、……
X.ndim #数组的维数,结果是一个数
X.size #数组中元素的数量
X.itemsize #数组中的数据项的所占内存空间大小
X.dtype #数据类型
X.T #如果X是矩阵,发挥的是X的转置矩阵
X.trace() #计算X的迹
###### 创建
array( [ [1,2], [3,4] ], dtype=complex )
np.arange(2,3,0.1) 起点,终点,步长值。含起点值,不含终点值。
np.linspace(1,4,10) 起点,终点,区间内点数。起点终点均包括在内
np.logspace()
zeros( (3,4) ) 创建给定形状的 0‘s数组
ones( (2,3,4), dtype=int16 ) 创建给定形状的 1‘s数组
empty( (2,3) ) 创建一个没有使用特定值来初始化的数组
zeros_like/ones_like/empty_like(数组A) 创建与数组A形状和数据类型都相同的指定数组
eye, identity 生成一个NxN的单位方阵(对角线上为1,其它地方为0)
###### 数据类型转换
astype 方法 显式的把一个数组的dtype转换或 投射 到另外的类型
a = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
b = np.array([1.0,2.0])
a.astype(float) 或 a.astype(b.dtype)
array([ 1.25, -9.6 , 42. ])
####### 数组元素
np.where(条件)
np.where(arr > 0, 2, -2) arr中正值替换为2,负值替换为-2
index = np.where(arr>2) 得到值大于2的索引号
new_arr = arr[index] arr中大于2的元素组成的数组
new_arr = np.delete(arr, index) 删除arr中元素值大于2的元素
np.argwhere(条件)
np.extract([条件],a)
布尔数组 (可以用或与非等操作)
arr > 2 得到布尔数组,形如 array([False, False, True, True], dtype=bool)
new_arr = arr[index] arr中大于2的元素组成的数组,可以用 ~index 来得到小于2的数组
np.delete(arr, index) 删除arr中的索引为index中的元素
ndarray.all() 如果所有元素都为真,那么返回真;否则返回假
ndarray.any() 只要有一个元素为真则返回真
ndarray.ptp(axis=None, out=None) 返回数组的最大值—最小值或者某轴的最大值—最小值
ndarray.clip(a_min, a_max, out=None) 小于最小值的元素赋值为最小值,大于最大值的元素变为最大值。
numpy.repeat(a, repeats, axis=None) 重复数组的元素
numpy.tile(A, reps) 根据给定的reps重复数组A,和repeat不同,repeat是重复元素,该方法是重复数组。
numpy.put(a, ind, v, mode=’raise’) 用v的值替换数组a中的ind(索引)的值。Mode可以为raise/wrap/clip。
Clip:如果给定的ind超过了数组的大小,那么替换最后一个元素。
ndarray.compress(condition, axis=None, out=None) 指定轴上条件下的切片。
ndarray.nonzero() 非零元素的索引
np.unique(arr) 类似于元素去重 纯python中的类似命令:sorted(set(list))
###### 改变形状
ndarray.reshape(shape[, order]) 返回重命名数组大小后的数组,不改变元素个数.
ndarray.resize(new_shape[, refcheck]) 改变数组的大小(可以改变数组中元素个数).
ndarray.transpose(*axes) 返回矩阵的转置矩阵
ndarray.swapaxes(axis1, axis2) 交换两个轴的元素后的矩阵.
ndarray.flatten([order]) 复制一个一维的array出来.
ndarray.ravel([order]) 返回为展平后的一维数组.
ndarray.squeeze([axis]) 移除长度为1的轴。
ndarray.tolist() 将数组转化为列表
hstack((a,b)) concatenate((a,b),axis=1) 水平组合
vstack((a,b)) concatenate((a,b),axis=0) 垂直组合
dstack((a,b)) 深度组合
hsplit,vsplit,dsplit,split(split与concatenate相对应) 数组分割
arr.flat[2:6] 将数组变为1维数组,并获取其中的一部分数据
#### 统计相关函数
sum 对数组的所有或一个轴向上的元素求和。零长度的数组的和为0。
mean 算术平均值。灵长度的数组的均值为NaN。
std, var 标准差和方差,有可选的调整自由度(默认值为n)。
min, max 最大值和最小值
argmin, argmax 索引最小和最大元素。
cumsum 从0元素开始的累计和。
cumprod 从1元素开始的累计乘。
ndarray.prod(axis=None, dtype=None, out=None) 指定轴的所有元素乘积
###### 随机数
numpy.random 随机数生成
np.random.rand(3,2) 产生一个3行2列的随机数组 同一空间下,有randn()/randint()等多个随机函数
##### 复数
array( [ [1,2], [3,4] ], dtype=complex )
arr.imag 获得复数的虚部
arr.real 获得复数的实部
np.angle() 复数的辐角
np.rad2deg() 弧度变为角度单位
ndarray.conj():返回所有复数元素的共轭复数
##### 数组集合操作
unique(x) 计算x单一的元素,并对结果排序
intersect1d(x, y) 计算x和y相同的元素,并对结果排序
union1d 结合x和y的元素,并对结果排序
in1d(x, y) 得到一个布尔数组指示x中的每个元素是否在y中
setdiff1d(x, y) 差集,在x中但不再y中的集合
setxor1d(x, y) 对称差集,不同时在两个数组中的元素
###### 积分
np.trapz(y,x) # 相当于计算序列点(x,y)为顶点坐标的折线与x轴所夹的面积
###### 数组函数
abs, fabs 计算基于元素的整形,浮点或复数的绝对值。fabs对于没有复数数据的快速版本
sqrt 计算每个元素的平方根。等价于 arr ** 0.5
square 计算每个元素的平方。等价于 arr ** 2
exp 计算每个元素的指数。
log, log10, log2, log1p 自然对数(基于e),基于10的对数,基于2的对数和 log(1+ x)
sign 计算每个元素的符号:1(positive),0(zero), -1(negative)
ceil 计算每个元素的天花板,即大于或等于每个元素的最小值
floor 计算每个元素的地板,即小于或等于每个元素的最大值
rint 圆整每个元素到最近的整数,保留dtype
modf 分别返回分数和整数部分的数组
isnan 返回布尔数组标识哪些元素是 NaN (不是一个数)
isfinite, isinf 分别返回布尔数组标识哪些元素是有限的(non-inf, non-NaN)或无限的
cos, cosh, sin sinh, tan, tanh regular 和 hyperbolic 三角函数
arccos, arccosh, arcsin, arcsinh, arctan, arctanh 反三角函数
logical_not 计算基于元素的非x的真值。等价于 -arr
add 在数组中添加相应的元素
substract 在第一个数组中减去第二个数组
multiply 对数组元素相乘
divide, floor_divide 除和地板除(去掉余数)
power 使用第二个数组作为指数提升第一个数组中的元素
maximum, fmax 基于元素的最大值。 fmax 忽略 NaN
minimum, fmin 基于元素的最小值。 fmin 忽略 NaN
mod 基于元素的模(取余)
copysign 拷贝第二个参数的符号到第一个参数
greater, greater_equal, less, less_equal, not_equal 基于元素的比较,产生布尔数组。等价于中缀操作符 >,>=, <,
<=,==, !=
logical_and, logical_or, logical_xor 计算各个元素逻辑操作的真值。等价于中缀操作符 &,|, ^
arr.round(decimals=0) 指定精度下的四舍五入
##### 矩阵
NumPy 的 matrix 类型则可以直接用运算符号进行运算
A = np.matrix([[3, 6, -5], [1, -3, 2], [5, -1, 4]])
B = np.matrix([[12], [-2], [10]])
X = A ** (-1) * B
数组排序(小到大):列排列np.msort(a),行排列np.sort(a),np.argsort(a)排序后返回下标
复数排序:np.sort_complex(a)按先实部后虚部排序
数组的插入:np.searchsorted(a,b)将b插入原有序数组a,并返回插入元素的索引值
根据b中元素作为索引,查找a中对应元素:np.take(a,b)一维
数组中最小最大元素的索引:np.argmin(a),np.argmax(a)
多个数组的对应位置上元素大小的比较:np.maximum(a,b,c,…..)返回每个索引位置上的最大值,np.minimum(…….)相反
将a中元素都置为b:a.fill(b)
每个数组元素的指数:np.exp(a)
求余:np.mod(a,n)相当于a%n,np.fmod(a,n)仍为求余且余数的正负由a决定
计算平均值:np.mean(a)
计算加权平均值:np.average(a,b),其中b是权重
计算数组的极差:np.pth(a)=max(a)-min(a)
计算方差(总体方差):np.var(a)
标准差:np.std(a)
算术平方根,a为浮点数类型:np.sqrt(a)
对数:np.log(a)
点积(计算两个数组的线性组合):np.dot(a,b),即得到a*b(一维上是对应元素相乘,多维可将a*b视为矩阵乘法
修剪数组,将数组中小于x的数均换为x,大于y的数均换为y:a.clip(x,y)
所有数组元素乘积:a.prod()
数组元素的累积乘积:a.cumprod()
数组元素的符号:np.sign(a),返回数组中各元素的正负符号,用1和-1表示
数组元素分类:np.piecewise(a,[条件],[返回值]),分段给定取值,根据判断条件给元素分类,并返回设定的返回值。
判断两数组是否相等: np.array_equal(a,b)
判断数组元素是否为实数: np.isreal(a)
去除数组中首尾为0的元素:np.trim_zeros(a)
对浮点数取整,但不改变浮点数类型:np.rint(a)
中位数 np.median(a)
######### 文档
Python 读写文件文件虽然方便且效率很好,但是不太适合处理极大的文件。
当文件内容有结构,且为数字时用 NumPy 处理,存 numpy.ndarray 会更合适。
numpy.loadtxt()/numpy.savetxt() 载入txt文件
numpy.genfromtxt()/numpy.recfromcsv() 智能导入文本/csv文件
numpy.save()/numpy.load() 高速,有效率但numpy特有的二进制格式
######## numpy.linglg 函数
diag 返回一个方阵的对角线(或非对角线)元素为一个一维数组,或者转换一个一维数组到一个方阵(非对角线元素为零)
dot 矩阵乘积
trace 计算对角线上元素的和
det 计算矩阵行列式
eig 计算方阵的特征值和特征向量
inv 计算方阵转置
pinv 计算方阵 Moore-Penrose pseudo-inverse 的转置
qr 计算 QR 分解
svd 计算奇异值分解(SVD)
solve 求解线性系统方程 Ax = b 的x,其中A是一个方阵
lstsq 计算 y = Xb 的最小二乘解
np.linalg.logm(A) 计算矩阵A的对数
cosm()/sinm()/signm()/sqrtm() 对矩阵进行计算
cross, dot, outer, svd, vdot