NumPy数据存取与函数
数据的CSV文件存取
CSV:(Comma-Separated Value,逗号分隔值)
CSV是一种常见的文件格式,用来储存批量的数据。
将数据写入CSV文件:
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
- frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件。
- array:存入文件的数组。
- fmt:写入文件的格式,例如:%d %.2f %.18e。
- delimiter:分割字符串,默认为任何空格。
将CSV中的数据读入到NumPy中的数组类型:
np.loadtxt(frame,dtype=np.float,delimiter=None,unpack=False)
- frame:文件、字符串、或产生器,可以是.gz或.bz2的压缩文件。
- dtype:数据类型,可选。#在loadtxt中,我们需要将CSV中的每一个元素由字符串变为一个特定的格式,即用到dtype来指定。(默认状态下为浮点数类型)
- delimiter:分割字符串,默认是任何空格。
- unpack:如果True,读入属性将分别写入不同变量。#将unpack默认为False,即默认为读入一个数组。
CSV文件的局限性:
CSV只能有效存储一维和二维数组。
多维数据的存取
a.tofile(frame,sep='',format='%s')
- frame:文件、字符串。
- sep:数据分割字符串,如果是空串(即不指定sep时),写入文件为二进制格式。
- format:写入数据的格式。
#事实上二进制文件相较于文本文件占用了更小的空间,如果掌握了显示字符的编码以及字节之间的关系,就能理解图中二进制格式的数据。我们可以将它作为数据备份的一种方式。
np.fromfile(frame,dtype=float,count=-1,sep='')
- frame:文件、字符串。
- dtype:读取的数据类型。#无论什么样的方法,从文件中读取元素的时候总要制定一个数据类型,只有这样才能正确的解析元素的内容。(默认情况下为float类型)
- count:读入元素的个数,-1表示读入一整个文件。
- sep:数据分割字符串,如果为空串,写入文件为二进制。
#刚开始创建的c为一个一维数组,要想使得c与a的形状相同,我们需要用.reshape()来制定c的形状。(即将数组写入文件之后,其中的维度信息丢失,我们需要知道维度信息才能够有效地还原原数组)。
需要注意:a.tofile()和np.fromfile()需要配合使用。
那我们怎么才能知道元素存储的类型和维度???
可以通过元数据文件来存储额外信息。(再写一个文件,将要存储的数组的每个元素类型以及它的维度作为元信息存储起来。有效但显然复杂且麻烦)。
NumPy的便捷文件存取
np.save(frame,array) 或np.savez(frame,array)#savez()方法是将数组以压缩的格式存入文件中。
- frame:文件名,以.npy为扩展名,压缩扩展名为.npz。#这种方法的写入和读取必须基于NumPy自定义的文件格式。
- array:数组变量。
np.load(frame)#可以直接还原回数组的维度以及相关信息。
- frame:文件名,以.npy为扩展名,压缩扩展名为.npz。
#用二进制工具打开存储的a.npy文件,我们可以看到文件事实上是以二进制的形式将数组存储起来,而在这个文件的最开始,用显式的方式将数组的元信息写到了第一行中,这样在NumPy的load()函数读取这个文件时,可以通过解析第一行的元信息,得到文件中储存数据的大致形状和适用类型,最终有效地还原回一个数组。
使用什么样的方法来存取文件,需要针对不同的使用场景来判断。
Numpy的随机数函数
Numpy的random子库
函数 | 说明 |
---|---|
rand(d0,d1,…,dn) | 跟据d0-dn创建随机数数组,浮点数,[0,1),均匀分布 |
rand(d0,d1,…,dn) | 跟据d0-dn创建随机数数组,其中元素的选择符合标准正态分布 |
randint(low[,high=None, size=None, dtype=’l’]) | 跟据shape即数组维度创建随机整数或者整数数组,范围是[low,high),均匀分布,size为元素的个数,dtype为元素的类型 |
seed(s) | 随机数种子,s是给定的种子值 |
shuffle(a) | 跟据数组a的第一轴(即最外维度)进行行随机排列,改变数组a |
permutation(a) | 跟据数组a的第一轴产生一个新的乱序数组,不改变数组a |
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形状 |
#通过设定和重复使用同一个随机数种子,我们可以在测试的时候产生相同的随机数数组。
#p=b/np.sum(b) 表示的是元素的值越大,其被抽取到的概率越高。
NumPy的统计函数
统计函数,能够对数组中的数据进行统计运算的函数。
axis=None是统计函数的标配参数,默认情况下不输入就是对整个数组所有元素进行统计计算,如果给定了轴,就是对轴上的元素进行相关计算。
函数 | 说明 |
---|---|
sum(a,axis=None) | 跟据给定轴axis计算数组a相关元素之和,axis整数或者元组,即对第n维所有元素求和 |
mean(a,axis=None) | 跟据给定轴axis计算数组a相关元素的期望,axis整数或者元组 |
average(a,axis=None,weights=None) | 跟据给定轴axis计算数组a相关元素的加权平均值 weight为权重,若不给出,则按照等权重 |
std(a,axis=None) | 跟据给定轴axis计算数组a相关元素的标准差 |
var(a,axis=None) | 跟据给定轴axis计算数组a相关元素的方差 |
min(a) max(a) | 计算数组a中元素的最小值、最大值 |
argmin(a) argmax(a) | 计算数组a中元素的最小值、最大值的降一维后下标(即是寻找数组中最小值、最大值所在的位置,但这个位置是被扁平化成一维之后的位置) |
unravel_index(index,shape) | 跟据shape将一维下标index转换为多维下标(即对下标的去扁平化,重塑为多维下标) |
ptp(a) | 计算数组a中元素最大值与最小值的差 |
median(a) | 计算数组a中元素的中位数(中值)#中位数的运算使通过公式求得的,结果为一个浮点数 |
NumPy的梯度函数
np.gradient(f) #计算数组中f元素的梯度,当f为多维时,返回每个维度梯度
梯度:连续值之间的变化率,即斜率。
XY坐标轴连续三个X坐标对应的Y轴值:a,b,c 其中b的梯度为(c-a)/2
梯度反映了元素的变化率,尤其是在我们进行图像、声音等批量数据处理的时候,有助于我们发现图像或声音的边缘。在变化不平滑的位置,通过梯度的运算,很容易能够发现。在图像处理、声音处理等运算的过程中,gradient()函数能够发挥很大的作用。
#所有视频截图均来自中国大学mooc北京理工大学嵩天老师的课程
《Python数据分析与展示》