数据挖掘我爱编程

NumPy

2018-04-15  本文已影响8人  天际神游

NumPy本身没有提供多么高级的数据分析功能,理解NumPy数组以及面向对象数组的计算将有利于更加高效的使用诸如pandas之类的工具。默认这样使用numpy:

import numpy as np

NumPy最重要的一个特点就是N维数组对象ndarray,该对象是一个快速而灵活的大数据集容器。

ndarray对象的属性及方法表(下面简称数组):

属性方法 作用
shape 维度大小
dtype 数据类型
array 把序列型对象转化为ndarraydtype可以显式指明类型
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) 找出数组中唯一值(类似pythonset)并返回已排序的结果
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)中均匀分布的样本值
上一篇下一篇

猜你喜欢

热点阅读