NumPy
2018-04-15 本文已影响8人
天际神游
NumPy本身没有提供多么高级的数据分析功能,理解NumPy数组以及面向对象数组的计算将有利于更加高效的使用诸如pandas之类的工具。默认这样使用numpy:
import numpy as np
NumPy最重要的一个特点就是N维数组对象ndarray
,该对象是一个快速而灵活的大数据集容器。
ndarray对象的属性及方法表(下面简称数组):
属性方法 | 作用 |
---|---|
shape | 维度大小 |
dtype | 数据类型 |
array | 把序列型对象转化为ndarray ,dtype 可以显式指明类型 |
ndim | 维度 |
矢量化(vectorization)运算 | 数组对应元素相加减乘除,无需编写循环,如:a2 = a*a , c= a-b (数组维度需要相同), 'a/2' a中所有元素都会除以2 |
np.zeros(10),np.zeros_like(数组) | 创建全0 数组 |
np.ones((2, 3)),np.ones_like(数组) | 创建全1 数组 |
np.empty((1, 2, 3)),np.empty_like(数组) | 创建空的数组(数组未初始化) |
np.eye(2) or np.identity(1) | 创建n*n 单位矩阵 |
np.arange(10) | 类似Python内置函数range()
|
astype(np.int32) | 显式的转化其dtype ,字符串也可以转化!但是是新的数组,即使新旧的dtype 相同 |
[3] | 索引 |
[5:8] | 切片(这里的切片只是视图,而非副本,如要副本,[5:8].copy())
|
[布尔型数组] | 可以作为索引(大小需匹配),一般可以这样使用,a[b < 0] = 0
|
a[b == value, 2:] | 与切片、整数可以混合使用 |
花式索引 |
a[[5, 3, -2]] 选取a的5,3,-2行;选取矩形区域a[[5,3,-1], [:, [0,2,1]]] ,还有一个方法是使用ix_ 它可以把两个一维数组转化成选取方形区域的索引器,如:a[np.ix_([5,3,-1], [0,2,1]] ,注意:花式索引总是把数据复制到新的数组中 |
reshape | 改变原有数组的形状 |
T | 返回原数组转置后的视图,不进行任何复制操作 |
np.dot(a.T, a) | 计算矩阵内积aTa |
transpose((1,0,3)) | 需要得到一个由轴编号组成的原组才能对这些轴进行转置 |
swapaxes(1,2) | 接受一对轴编号进行轴对换,只是返回视图,不进行复制操作 |
np的一些方法:
属性方法 | 作用 |
---|---|
通用函数(ufunc) | 是对ndarray中的数据执行元素级运算的函数,可以看做是简单函数的矢量包装器 |
一元ufunc | |
abs, fabs | 计算整数、浮点数或复数的绝对值;对于非复数,使用后者速度更快 |
sqrt | 计算各元素的平方根,类似:a ** 0.5
|
square | 计算各元素的平方 |
exp | 计算各元素的指数ex |
log, log10, log2, log1p | 分别为底数是自然对数e, 10, 2以及log(1+x) |
sign | 计算各元素正负号,整数、零、负数分别是1,0,-1
|
ceil | 计算各元素的ceiling 值,即大于等于该值的最小整数 |
floor | 计算各元素的floor 值,即大于等于该值的最大整数 |
rint | 将各元素四舍五入到最接近的整数值,保留dtype |
modf | 将数组的小数和整数部分以两个独立数组的形式返回 |
isnan | 返回一个表示那些是NaN 的布尔型数组 |
isfinite, isinf | 分别返回一个表示那些元素是有穷的(非inf , 非NaN )或那些元素是无穷的 |
cos, cosh, sin, sinh,tan, tanh | 普通型和双曲型三角函数 |
arccos, arccosh, arcsin, arcsinh, arctan, arctanh | 反三角函数 |
logical_not | 计算各元素的not x 的真值(返回一个布尔类型的数组) |
二元ufunc | |
add | 相加 |
subtract | 相减 |
multiply | 相乘 |
divide, floor_divide | 除法或向下取整除法(类似python // ) |
power(a,b) | 求ab |
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(a>0,b,c) | 类似python三元表达式 |
数学和统计方法 | 既可以被ndarray 调用,也可以被np 调用 |
sum | 求和,可以通过axis 指定某轴向的元素 |
mean | 算术平均数,零长度的数组的sum为0 |
std、var | 分别为标准差,方差,自由度可调整(默认为n) |
min、max | 最大值和最小值 |
argmin、argmax | 分别为最大和最小元素的索引 |
cumsum | 所有元素累计和 |
cumprod | 所有元素的累计积 |
常用于布尔类型的方法 | |
举例如下: | |
a(>0).sum() | 求正值的数量 |
bools.any() | 是否存在一个或多个True
|
bools.all() | 是否全部为True
|
a.sort() | 就地升序排序,可以通过axis 指定轴向 |
unique(a) | 找出数组中唯一值(类似python 的set )并返回已排序的结果 |
intersect1d(a, b) | 计算a、b的公共元素,并返回有序的结果 |
union1d(a, b) | 计算a、b的并集,并返回有序结果 |
in1d(a,b) | 得到一个表示a是包含于b的布尔型数组(?a中元素在b中即为True) |
setdiff1d(a,b) | 集合的差,在a中不在b中 |
setxor1d(a,b) | 集合的对称差,即只在一个数组中,即,‘异或’ |
用于数组的文件输入输出 | |
save('file1', a) | 默认以未压缩的原始二进制格式保存在拓展名为.npy 的文件中 |
load('file1.npy') | 读取 |
savez('file1.npz', a=arr1, b=arr2) | 多个数组保存到一个压缩文件,load .npz 文件会得到一个字典类型的数组,获取a, b数组,a['a'] , a['b']
|
loadtxt('file1.txt', delimiter=',') | 读取txt 文件,以, 分割 |
线性代数 | |
a*b | 计算的是a和b对应元素的积,而非点积 |
dot | 矩阵点积 |
numpy.linalg | 这个库有常用的矩阵分解运算等关于矩阵的函数,常用函数如下: |
diag | 以一维数组的形式返回方阵的对角线(或非对角线元素) |
dot | 矩阵乘法 |
trace | 计算对角线元素和 |
det | 计算矩阵行列式 |
eig | 计算方阵的本征值和本征向量 |
inv | 求逆 |
pinv | 计算矩阵的Moore-Penrose伪逆 |
qr | 计算QR分解 |
svd | 计算奇异值分解 |
solve | 解线性方程Ax=b,其中A为一个方阵 |
lstsq | 计算Ax=b的最小二乘解 |
随机数生成 | |
np.random.normal(size=(4, 4)) | 生成标准正态分布 |
seed | 确定随机数生成种子 |
permutation | 返回一个的随机排列或返回一个随机排列的范围 |
shuffle | 对一个序列就地随机排列 |
rand | 产生均匀分布的样本值 |
randint | 给定的上下限范围内随机选取整数 |
randn | 产生正态分布 |
binomial | 产生二项分布 |
normal | 产生高斯分布 |
beta | 产生Beta分布的样本值 |
chisquare | 产生卡方分布样本值 |
gamma | 产生Gamma分布样本值 |
uniform | 产生在[0, 1)中均匀分布的样本值 |