Python | Numpy入门(2)_笔记

PYTHON2

数据的.CSV文件存取

  1. .csv是一种文件存储格式(逗号分隔值)。
  2. .csv只能有效存储一维和二维数组
  3. numpy读写.csv文件:
#存取csv文件

np.savetxt(frame,array,fmt='%.18e',delimiter=None)
#frame:文件、字符器或产生器,可以是.gz或者.bz2的压缩文件。
#array:存入文件的数组
#fmt:写入文件的格式,例如:%d(整数类型)、%.2f(浮点数类型)、%.18e(科学计数法 ,保留18位小数)
#delimiter:分割字符串,默认为空格,在csv文件中需要定义为‘,’。

#eg1:

a=np.arange(100).reshape(5,20)
np.savetxt('a.csv',a,fmt='%d',delimiter=',')
#将数组a存为a.csv,以整数模式存储,逗号分隔。行与行之间用换行符分割。

#eg2:

a=np.arange(100).reshape(5,20)
np.savetxt('a.csv',a,fmt='%.1f',delimiter=',')
#将数组a存为a.csv,保留一位小数点,浮点数形式。
#载入csv文件

np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
#frame:文件、字符器或产生器,可以是.gz或者.bz2的压缩文件。
#dtype:更改数据格式。(默认为浮点数类型)
#delimiter:分割字符串
#unpack:默认为False(即读入的属性写进一个数组),如果是True则写入不同数组

#eg3:

b=np.loadtxt('a.csv',delimiter=',')
b=np.loadtxt('a.csv',dtype=np.int,delimiter=',')

更多csv读取方法:

更多方法参见:csv读取方法

python的格式化输出:

可参考博客:

  1. 参考资料1
  2. 参考资料2
  3. 参考资料3

多维数据的存取

——如何存取任意维度的数据?

#存取数据

a.tofile(frame,swp='',format='%s')
#frame:文件、字符串的名字
#sep:数据分割的字符串,如果不写默认按二进制写入(和excel数据分列很像)
#format:数据写入的格式

#eg1:

a=np.arange(100).reshape(5,10,2)
a.tofile('b.dat',sep=",",format='%d')
#数字间分隔符为逗号,且全为整数。没有包含其他信息,纯数字。
#如果不加分隔符则会变成二进制文件(肉眼看来是乱码但是占用更小存储空间,可以作为数据备份的一种方式)

#从二进制文件中还原数据

np.fromfile(frame,dtype=float,count=-1,sep='')
#frame:文件、字符串的名字
#dtype:读取的数据类型(想要读出来后的数据类型),默认为float
#count:读入的元素个数,-1为整个文件
#sep:数据分割字符串,不写为二进制。

#eg2:

a=np.arange(100).reshape(5,10,2)
a.tofile('b.dat',sep=",",format='%d')#生成文本文件,不包含数据信息
c=np.fromfile("b.dat",dtype=np.int,sep=",")
c #c是一维数组
c=np.fromfile("b.dat",dtype=np.int,sep=",").reshape(5,10,2)#此时就能够生成与原数组一致的数组

#eg3:

a=np.arange(100).reshape(5,10,2)
a.tofile('b.dat',format='%d')
c=np.fromfile("b.dat",dtype=np.int).reshape(5,10,2)#这样同样也能够生成与a一致的数组

如果要用np.tofilenp.fromfile配合使用,需要读取时知道存入文件时的数组的元素类型和维度

——可以将数组元素类型和维度作为元信息存储起来。每次可以打开查看。

Numpy的便捷文件存取

np.save(fname,array)
np.savez(fname,array)
#fname:文件名称,以.npy为拓展名。(为一个numpy自定义的数据格式)压缩拓展名为.npz
#array:数组变量

np.load(fname)
#把数组读回来并还原相关信息。

#.npy格式把数组的元信息用可见格式写在了第一行,而数据信息都用二进制存储。
#如果程序中间需要数据缓存使用save/load较好,需要交互使用savetxt/loadtxt或者tofile/fromfile较好。

#eg1:

a=np.arange(100).reshape(5,10,2)
np.save("a.npy",a)
b=np.load("a.npy")
b #此时输出和数组a完全一致。

Numpy的随机数函数

  1. python标注库random库为标量提供相关功能
  2. numpy的random子库为数组类型提供相关功能(np.random.rand()…)
rand(d0,d1,...,dn)
#根据维度的形状生成随机数数组,元素间均匀分布,属于(0~1),为浮点数。

randn(d0,d1,...,dn)
#同上但符合正态分布。

randint(low[,high,shape])
#取值范围(low~hign),形状为shape。

seed(s)
#随机数种子函数。

shuffle(a)
#根据数组a的第0轴(最外)进行随机排列,改变原数组(相当于按照第一列拓展排序,但是规则是随机的)。

permutation(a)
#根据数组a的第0轴(最外)进行随机排列产生一个乱序数组,但是不改变原数组。

choice(a,size,replace,p)
#从一维数组a中以概率p抽取元素,形成一个size形状的新数组。
#replace表示是否可以重复抽取,默认为True。

uniform(low,high,size)
#产生具有均匀分布的数组,low为起始值,high为终止值,size为形状。(等概率抽取)

normal(loc,scale,size)
#产生具有正态分布的数组,loc为均值,scale为标准差,size为形状。

poisson(lam,size)
#产生具有泊松分布的数组,lam为随机事件的发生率,size为形状。
#eg1:

sn=np.random.randn(3,4,5)#符合正态分布
b=np.random.randint(100,200,(3,4))#符合均匀分布
np.random.seed(10)
#设计相同的随机数种子生成相同大小的数组会完全一样。

#eg2:

import numpy as np
a=np.random.randint(100,200,(3,4))
a
np.random.permutation(a)
a #两次输出的a是一样的

#eg3:

np.random.choice(b,(3,2))#默认
np.random.choice(b,(3,2),replace=False)
#表示拒绝重复抽取
np.random.choice(b,(3,2),p=b/np,sum(b))
#元素的值越大,其被抽中的概率就越高

#eg4:

n=np.random.normal(10,5,(3,4))
#生成以10为均值,5为标准差的(3,4)数组。

Numpy的统计函数

计算基本函数

sum(a,axis=None)
#根据给定轴axis计算数组a相关元素之和,axis取值为整数或者元组,默认是对a中所有元素求和(可以指定轴的编号)。

mean(a,axis=None)
#根据给定轴axis计算数组a相关元素的期望,axis取值为整数或者元组,默认是对a中所有元素求期望(可以指定轴的编号)。

average(a,axis=None,weights=None)
#根据给定轴axis计算数组a相关元素的加权平均值,axis取值为整数或者元组,weight代表权重矩阵,默认为等权。

std(a,axis=None)
#根据给定轴axis计算数组a相关元素的标准差。

var(a,axis=None)
#根据给定轴axis计算数组a相关元素的方差。
#eg1:

import numpy as np
a=np.arange(15).reshape(3,5)
>[[01234],
  [56789],
  [1011121314]]

np.sum(a)#对数组所有元素求和
np.mean(a,axis=1)#表示将数组中第二层维度的元素进行平均数计算,最后可以得到一个三个元素的数组。
np.mean(a,axis=0)
>([5,6,7,8,9])#每一列的三行的三个数求和,再求均值

np.average(a,axis=0,weights=[10,5,1])
>([2.1875,3.1875,4.1875,5.1875,6.1875])
#以中间的数为例,分别对三层数据的中间值2,7,12赋予了权重10,5,1,然后除以权重之和,得到4.1875,其余同理。

数值比较

min(a)max(a)
#计算数组a中元素的最小值和最大值
argmin(a)、argmax(a)
#计算数组a中元素最小值、最大值的位置-1个维度(是被扁平化为一维之后的位置)
unravel_index(index,shape)
#根据shape将一维下标index转换成多维下标
ptp(a)
#计算数组a中元素的最大值与最小值的差值
median(a)
#计算数组a中元素的中位数(中值)
#eg2:

b=np.arange(15,0,-1).reshape(3,5)
>[[15,14,13,12,11],  [10,9,8,7,6],  [5,4,3,2,1]]
np.max(b)
>15
np.argmax(b)
>0 
#因为argmax、argmin函数会将位置扁平化处理

np.unravel_index(np.argmax(b),b.shape)
>(0,0) 
#可以获得一个正常位置下标,因此这两个函数经常一起使用

np.median(b)
>8.0 
#本质上是一个运算,结果是浮点数

补充arange

关于此处arange的参数情况,有如下补充:

#一个参数 默认起点0,步长为1 
#输出:[0 1 2]
a = np.arange(3)

#两个参数 默认步长为1 
#输出[3 4 5 6 7 8]
a = np.arange(3,9)

#三个参数 起点为0,终点为3,步长为0.1 
#输出[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9]
a = np.arange(0, 3, 0.1)

参考博客:arange的更多使用方法

Numpy的梯度函数

  1. numpy的梯度函数只有一个
np.gradient(f)
#计算数组f中元素的梯度,当f为多维时,返回每个维度的梯度。如果是一维的就返回每个元素的梯度值。
  1. 梯度是连续值之间的变化率,即斜率。有助于发现变化的边缘,即拐点,广泛应用于图像和声音处理中。
#eg1:

a=np.random.randint(0,20,(5))
>[15,3,12,13,14]
np.gradient(a)
>[-12.,-1.5,5.,1.,1.]
#对于-1.5,计算方法为$(12-15)/(2-0)=-1.5$
#若只有一个值(比如最后一个),则用当前值减去前一个值。
#如果是多维数组则每个维度生成一个梯度值矩阵。

梯度的概念

参考博客:梯度是什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值