利用python进行数据分析学习笔记-Numpy篇

来源:互联网 发布:淘宝旗舰店申请 编辑:程序博客网 时间:2024/05/21 19:39

利用python进行数据分析学习笔记

Numpy基础:数组和矢量的计算

ndarray:一种多维数组对象

ndarray是什么?

一种通用的同构数据多维容器,每个ndarray包含一个shape和一个dtype属性。

创建ndarray

最常用的方式

>>>import numpy as np>>>data = [1,2,3,4,5,6]>>>array1 = np.array(data)>>>array1array([1,2,3,4,5,6])

其他方式

  • np.asarray
  • np.arange #类似于内置的range
  • np.ones np.oneslike #指定shape和dtype创建一个全1数组,oneslike以另一个ndarray为参数
  • np.zeros np.zeroslike #创建全零数组
  • np.empty np.empty_like #分配内存空间但不填充值
  • np.eye 、np.identity #创建单位矩阵
In[2]np.eye(5)Out[3]:array([[ 1.,  0.,  0.,  0.,  0.],              [ 0.,  1.,  0.,  0.,  0.],              [ 0.,  0.,  1.,  0.,  0.],              [ 0.,  0.,  0.,  1.,  0.],              [ 0.,  0.,  0.,  0.,  1.]])

ndarray的数据类型

查看数据类型arr.dtype
显示地更改数据类型arr.astype()#括号中可以是具体类型,也可以是某个数组,调用该数组的类型

In[1]:arr = [(1,2,3,4,5)]In[2]:arr.dtypeOut[3]:dtype('int64')In[4]:float_arr = arr.astype(np.float64)

数组和标量之间的运算

  • 大小相同的数组运算将应用到元素级
  • 数组和标量的运算将传播到各个元素
  • 大小不同的数组间运算称为广播

基本的索引和切片

  • 低纬度比较简单,略过
  • 高纬度切片,索引相组合
arr[:2,1:,:]#表示0轴0~2除去2,1轴1~n包括1,2轴全部

书上的图
- 布尔型索引

# data[names!= 'bob',:2]# 使用&,|作为bool运算符,and、or在布尔数组中无效
  • 花式索引:利用整数数组进行索引
    arr[[4,3,0,6]]#表示选取这四行
arr[[1,4,3,7],[2,3,1,0]]#选取四个元素arr[[1,4,3,7],[:,[2,3,1,0]]]#重叠部分相加构成一个方形区域arr[np.ix_[],[]]  #效果与:,[]一致

数组的转置和轴对换

arr.T #简单的轴对换

transpose的运用
对多维数组,确定最底层的一个基本元素位置需要用到的索引个数即是维度对维度进行编号,就是我们所说的axis号(0,1,2),即shape元组的索引
transpose参数的真正意义在于对这个shape元组的索引

arr = array([[[ 0,  1,  2,  3],        [ 4,  5,  6,  7]],       [[ 8,  9, 10, 11],        [12, 13, 14, 15]]])In[]:arr.shapeOut[]:(2,2,4)In[]:arr.transpose((1,0,2))Out[]:array([[[ 0,  1,  2,  3],                    [ 8,  9, 10, 11]],       [[ 4,  5,  6,  7],        [12, 13, 14, 15]]])        #transpose中的参数指的是轴号,原来是(0,1,2),转变成(1,0,2),可以把arr看做[[[0,0],[0,1]],[[1,0],[1,1]]],0,1互换后成为[[[0,0],[1,0]],[[0,1],[1,1]]]

swapaxes方法的用法和transpose类似

通用函数

常用一元ufunc:

  • abs、fabs
  • sqrt
  • square
  • exp
  • log、log10、log2、log1p #log1p指的是log(1+x)
  • sign
  • ceil #返回ceiling值,即大于等于该值的最小整数
  • floor #小于等于该值的最大整数
  • rint #四舍五入到整数,并保留dtype值
  • modf #将元素的整数和小数部分以两个数组返回
  • isnan
  • isfinite、isinf #返回是、不是有穷值的布尔型数组
  • cos、cosh、sin、sinh、tan、tanh
  • arc…
  • logical_not #计算各元素not x的真值。相当于-arr

常用二元ufunc

  • add # np.add(x,y)
  • subtract # 减
  • multiply # 乘
  • divide、floor_divide # 除法、丢弃余数
  • power np.power(a,b) # 计算a^b
  • maximum、fmax
  • minmun、fmin
  • mod # 余数
  • copysign 第二组元素中的符号复制给第一组元素
  • greater、greater_equal、less、less_equal、equal、not_equal >、>=、<、<=、==、!= 返回布尔型数组
  • logical_and、logical_or、logical_xor 逻辑运算

利用数组进行数据处理

用数组表达式代替循环,通常被称为矢量化
numpy.where是if condition else y 的矢量化版本

result = np.where(cond,xarr,yarr)np.where(cond1 & cond2,a,np.where(cond1,b,np.where(cond2,c,d))) #将for循环改编成嵌套的where表达式

数学和统计方法

可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算
既可以当做数组的实例方法调用arr.mean(),也可作为Numpy函数使用,np.mean(arr)
基本数组统计方法

  • sun
  • mean
  • std 、var #标准差和方差,自由度默认为n,可调
  • min、max
  • argmin 、argmax #最大和最小元素的索引
  • cumsun #所有元素的累积和
  • cumprod #所有元素的累计积
  • 对于布尔型数组,常用sum对True值计数,any用于测试是否存在True,all用于检查是否都为True
  • **排序**sort,np.sort返回已排序副本,arr.sort()修改数组本身,排序在计算分位数时是最简单的方法

数组的集合运算

  • 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.load() #用于读取磁盘上的npy文件
np.save() #用于将数组保存为npy文件
np.savez() #讲多个数组保存为压缩文件

线性代数

.dot方法用于矩阵间乘法,其它常用线性代数函数自己查吧,不写了

随机数生成

  • seed #确定随机数生成器的种子
  • permutation # 返回一个系列的随机排列或随机排列的范围
  • shuffle # 一个系列的就地随机排列
  • rand #产生均匀分布的样本值
  • randint #给定范围随机选取整数
  • randn # 产生正态分布样本值
  • binomial # 产生二项分布样本值
  • normal #产生正态(高斯)分布的样本值
  • beta # 产生Beta分布样本值
  • chiquare #产生卡方分布的样本值
  • gamma # Gamma分布
  • uniform #[0,1)均匀分布
阅读全文
0 0
原创粉丝点击