NumPy数据存储与数据处理相关函数

一、引言

在数据获取后,如何进行有效的存储和读取是数据分析的前提工作,我在最近的学习中进行了初步地了解。同时也对数据的简单处理所使用的常用函数有所认识。下面是我的学习收获想与大家分享一下。

二、数据存取(根据实际情况合理选择)

  1. 数据的CSV文件存取(利:CSV作为常见文件格式,可以用来存储批量数据,对于一维和二维数据非常好用;弊:只能有效存储一维和二维数据)

  1. 写入CSV文件

np.savetxt(frame,array,fmt=' ',delimiter=None)

备注:frame为文件、字符串、压缩文件;array为写入数组;fmt=' '填入数据类型;delimiter=‘ ’填入想要设定的分隔字符串

a = np.arange(100).reshape(5,20)
np.savetxt('a.csv',a,fmt='%d',delimiter=',')
  1. 读入CSV文件

np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)

备注:dtype=np.float表示设定数据类型为浮点型

a = np.arange(100).reshape(5,20)
np.loadtxt('a.csv',dtype=np.int,delimiter='a.csv')
  1. 多维数据的存取

  1. 存入

np.tofile(frame,sep=' ',format="%s")

备注:format=" "表示设置数据类型

a = np.arange(100).reshape(5,10,2)
np.tofile("b.dat",sep=',',format="%d")
  1. 写入(会丢失原来的维度)

np.fromfile(frame,dtype=float,count=-1,sep='')

备注:count= 表示读入元素个数,而-1表示整个文件

a = np.arange(100).reshape(5,10,2)
np.fromfile("b.dat",dtype=np.int,count=-1,sep=',',reshape(5,10,2))
  1. 简便(注意:必须基于ndarray自定义的文件格式,即以.npy或以.npz为扩展名的文件)

  1. 写入

np.save(fname,array)

a = np.arange(100).reshape(5,20)
np.save('a.csv',a)
  1. 读取

np.load(fname)

a = np.arange(100).reshape(5,20)
np.load('a.csv')

三、NumPy中随机数函数子库--random子库

  1. 基础函数

  1. rand(d0,d1,…,dn)

根据维度形状生成类型为浮点数并且范围在[0,1)的均匀分布的随机数数组

  1. randn(d0,d1,…,dn)

根据维度形状生成类型为浮点数并且范围在[0,1)的标准正态分布的随机数数组

  1. randint(low,high,shape)

根据shape创建,范围为[low,high)的随机数数组

  1. seed(s)

随机数种子,s是给定的种子值

  1. 高级函数

  1. shuffle(a)

根据数组a的第0轴进行随机排列,会改变数组a

  1. permutation(a)

根据数组a的第0轴进行随机排列,产生一个新的乱序数组,但不会改变数组a

  1. choice(a,size,replace,p)

从一维数组a中以概率p抽取元素形成size形状的新数组

备注:replace指是否可以重用元素(默认为True)

  1. 补充函数

  1. uniform(low,high,size) 产生具有均匀分布的数组

备注:low为起始数,high为结束数,size为形状

  1. normal(loc,scale,size) 产生具有正态分布的数组

备注:loc为均值,scale为标准差

  1. poisson(lam,size) 产生具有泊松分布的数组

备注:lam为随机事件发生率

四、统计函数

  1. 常用函数

  1. sum(a,axis=None) 根据给定轴,计算数组a 的相关元素的和

备注:axis=None表示对整个数组的所有轴的相关元素求和,也可以对特定轴的相关元素求和,轴可以用整数或者元组来表示

a = np.arange(15).reshape(3,5)
np.sum(a)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
105
a = np.arange(15).reshape(3,5)
np.sum(a,axis=1)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
[10 35 60]
  1. mean(a,axis=None) 根据给定轴,计算数组a 的相关元素的期望

a = np.arange(15).reshape(3,5)
np.mean(a)
[[[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]
 [[15 16 17 18 19]
  [20 21 22 23 24]
  [25 26 27 28 29]]]
14.5
a = np.arange(30).reshape(2,3,5)
np.mean(a,axis=1)
[[[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]
 [[15 16 17 18 19]
  [20 21 22 23 24]
  [25 26 27 28 29]]]
[[ 5.  6.  7.  8.  9.]
 [20. 21. 22. 23. 24.]]
  1. average(a,axis=None,weights=None) 根据给定轴,计算数组a 的相关元素的加权平均值

举例:4.1875=(2*10+7*5+1*12)/(10+5+1)

a = np.arange(15).reshape(3,5)
np.average(a,axis=0,weights=[10,5,1])
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
[2.1875 3.1875 4.1875 5.1875 6.1875]
  1. std(a,axis=None) 根据给定轴,计算数组a 的相关元素的标准差

a = np.arange(30).reshape(2,3,5)
np.std(a)
[[[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]
 [[15 16 17 18 19]
  [20 21 22 23 24]
  [25 26 27 28 29]]]
8.65544144839919
  1. var(a,axis=None) 根据给定轴,计算数组a 的相关元素的方差

a = np.arange(15).reshape(3,5)
np.var(a)
[[[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]
 [[15 16 17 18 19]
  [20 21 22 23 24]
  [25 26 27 28 29]]]
74.91666666666667
  1. 进阶函数

  1. min(a) 求最小值

max(a) 求最大值

a=np.arange(15,0,-1),reshape(3,5)
np.max(a) 
np.min(a)
[[15 14 13 12 11]
 [10  9  8  7  6]
 [ 5  4  3  2  1]]
15
1
  1. argmin(a) 计算元素最大值的降一维后下标

argmax(a) 计算元素最大值的降一维后下标

a=np.arange(15,0,-1),reshape(3,5)
np.argmin(a)
np.argmax(a)
[[15 14 13 12 11]
 [10  9  8  7  6]
 [ 5  4  3  2  1]]
14
0
  1. unravel_index(index,shape) 根据shape将一维下标index转换成多维下标

a=np.arange(15,0,-1),reshape(3,5)
np.unravel_index(np.argmax(a),a.shape)
[[15 14 13 12 11]
 [10  9  8  7  6]
 [ 5  4  3  2  1]]
(0, 0)
  1. ptp(a) 计算最大值与最小值的差

a=np.arange(15,0,-1),reshape(3,5)
np.ptp(a)
[[15 14 13 12 11]
 [10  9  8  7  6]
 [ 5  4  3  2  1]]
14
  1. median(a) 计算中位值

a=np.arange(15,0,-1),reshape(3,5)
np.median(a)
[[15 14 13 12 11]
 [10  9  8  7  6]
 [ 5  4  3  2  1]]
8.0

五、梯度函数

  1. np.gradient(f)

计算数组f中元素的梯度(连续值之前的变化率,即斜率)

备注:当f为多维时,返回每个维度梯度

举例:1=(10-9)/1(一维边缘值梯度)

0.5=(11-10)/2(一维中间值梯度)

14=(18-4)/1(二维边缘值梯度)

a = np.random.randint(0,20,(5))
np.gradient(a)
[ 9 10  8 11  4]
[ 1.  -0.5  0.5 -2.  -7. ]
a = np.random.randint(0,20,(2,5))
np.gradient(a)
[[ 4 15 10 18 14]
 [18  0  3  3  8]]
[array([[ 14., -15.,  -7., -15.,  -6.],
       [ 14., -15.,  -7., -15.,  -6.]]), array([[ 11. ,   3. ,   1.5,   2. ,  -4. ],
       [-18. ,  -7.5,   1.5,   2.5,   5. ]])]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值