参考教程: Python数据分析与展示_北京理工大学
CSV文件的存取(适用于一维二维数据)
- CSV(Comma-Separated Value)又叫逗号分隔值文件,是一种常见的文件格式,用来存储批量数据。
如:
CSV文件是存储一维和二维数据非常常见的格式 - NumPy中的操作
- 写入CSV文件
np.savetxt(frame, array, fmt='%.18e', delimiter=None)
参数:- frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
- array:存入文件的数组
- fmt:写入文件的格式,例如:%d、%.2f、%.18e等
- delimiter:分割字符串,默认是None,即任何空格
如:
import numpy as np # 导入numpy类 a = np.arange(100).reshape(5, 20) # 5行20列的数据 np.savetxt('a.csv', a, fmt='%d', delimiter=',') # 生成CSV文件
- 读取CSV文件
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
参数:- frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
- dtype:数据类型,可选,默认是float
- delimiter:分割字符串,默认是任何空格
- unpack:如果为True,读入属性将分别写入不同的数组变量
如:
import numpy as np # 导入numpy类 b = np.loadtxt('a.csv', dtype=np.int, delimiter=',') # 读取a.csv中的数据 print(b) # 输出数组b
- CSV文件的局限性
CSV文件可以很好的存储数据,但也有一定的局限性- CSV只能有效存储一维和二维数组
- np.savetxt( np.loadtxt()·只能有效存储和读取一维和二维数组
- 写入CSV文件
多维数据的存取
- NumPy中提供的方法
- 写入文件
a.tofile(frame, sep='', format='%s')
参数:- frame:文件、字符串
- sep:数据分割字符串,如果是空串,写入文件为二进制(二进制文件比文本文件占用更少的空间)
- format:写入数据的格式
如:
import numpy as np # 导入numpy类 c = np.arange(100).reshape(5, 10, 2) # 三维10行2列 c.tofile('c.bat', sep=',', format='%d') # 写入文件
- 读取文件
np.fromfile(frame, dtype=float, count=-1, sep='')
参数:- frame:文件、字符串
- dtype:读取的数据类型
- count:读入元素个数,-1表示读入整个文件
- sep:数据分割字符串,如果是空串,写入文件为二进制
如:
注意点:import numpy as np # 导入numpy类 d = np.fromfile('c.bat', dtype=np.int, sep=',') # 读取c.bat中的数据 print(d) # 结果会发现数据维度丢失 f = np.fromfile('c.bat', dtype=np.int, sep=',').reshape(5, 10, 2) # 读取c.bat中的数据 print(f) # 重新定义维度后还原原数据
- 该方法需要在读取时知道存入文件时数组的维度和元素类型,a.tofile()和np.fromfile()需要配合使用。可以通过元数据文件来存储额外信息
- NumPy的便捷文件存取
-
写入文件
np.save(fname, array)
或np.savez(fname, array)
参数:- frame:文件名,以.npy为扩展名,压缩扩展名为.npz
- array:数组变量
这种方法写入数据的文件格式不能修改
如:import numpy as np # 导入numpy类 f = np.arange(100).reshape(5, 10, 2) # 三维10行2列 np.save('f.npy', f) # 写入文件
-
读取文件
np.load(fname)
参数:- frame:文件名,以.npy为扩展名,压缩扩展名为.npz
如:
import numpy as np # 导入numpy类 g = np.load('f.npy') # 读取f.npy中的数据 print(g)
- frame:文件名,以.npy为扩展名,压缩扩展名为.npz
-
- 写入文件
NumPy的随机数函数
-
Python的标准库random是为一般的标量服务提供随机数服务的
-
NumPy的随机数函数子库random子库能为数组类型提供随机数的相关功能
-
np.random的随机数函数
如:- rand
import numpy as np # 导入NumPy库 a = np.random.rand(3, 4, 5) # 随机产生三维4行5列数组 print(a) # 输出a 结果: [[[0.13145815 0.41366737 0.77872881 0.58390137 0.18263144] [0.82608225 0.10540183 0.28357668 0.06556327 0.05644419] [0.76545582 0.01178803 0.61194334 0.33188226 0.55964837] [0.33549965 0.41118255 0.0768555 0.85304299 0.43998746]] [[0.12195415 0.73173462 0.13878247 0.76688005 0.83198977] [0.30977806 0.59758229 0.87239246 0.98302087 0.46740328] [0.87574449 0.2960687 0.13129105 0.84281793 0.6590363 ] [0.5954396 0.4363537 0.35625033 0.58713093 0.14947134]] [[0.1712386 0.39716452 0.63795156 0.37251995 0.00240676] [0.54881636 0.12697184 0.07979268 0.2350386 0.65996495] [0.21495319 0.20304662 0.38286511 0.2248728 0.1146488 ] [0.58301705 0.23264106 0.55651819 0.52381088 0.35095822]]]
- randn
import numpy as np # 导入NumPy库 sn = np.random.randn(3, 4, 5) # # 随机产生三维4行5列的呈正态分布的数组 print(sn) # 输出sn 结果: [[[ 0.87896938 0.56276301 0.28843534 -1.0064815 0.05397842] [-1.82672326 -0.09191484 -0.25318316 1.38059377 -0.68342883] [-0.31685115 -1.0172704 -0.97412377 -0.033239 0.98288302] [-0.46852895 -0.89533944 -0.07599641 -0.41520682 0.90493907]] [[-0.90289457 0.24743239 1.75223653 0.34854848 -0.02290254] [-0.96170169 0.0792365 -0.39327207 -0.60099441 -0.59484183] [-1.65773667 -0.00507017 0.79305654 -0.88911776 -0.9978168 ] [ 0.66989397 0.64851164 0.02573462 0.58660498 0.28408516]] [[-1.33168955 1.27310627 0.40924504 -0.60747309 0.93400955] [-1.84373609 0.47805208 0.48526092 -0.47499732 -1.16586593] [-0.75562989 0.5881038 -1.43924512 -0.46122134 1.21267456] [ 0.70466113 -0.45961232 0.53482087 1.46925737 -1.10320787]]]
- randint
import numpy as np # 导入NumPy库 b = np.random.randint(100, 200, (3, 4)) # 随机产生3行4列整数数组 print(b) # 输出b 结果: [[113 103 131 176] [187 117 129 169] [150 151 120 105]]
- seed
随机数种子对后面的结果一直有影响。同时,加了随机数种子以后,后面的随机数组都是按一定的顺序生成的。可参考:np.random.seed() 的使用详解np.random.seed(10) # 设定种子数 c = np.random.randint(100, 200, (3, 4)) # 产生特定的随机数组 np.random.seed(10) # 设定种子数 d = np.random.randint(100, 200, (3, 4)) # 产生特定的随机数组 print(c) print(d) 结果: [[109 115 164 128] [189 193 129 108] [173 100 140 136]] [[109 115 164 128] [189 193 129 108] [173 100 140 136]]
如:- shuffle和permutation
- choice
- rand
如:
NumPy的统计函数
能对数组中的信息进行统计运算的函数,使用是可以直接点函数名来使用。如:numpy.std()
、numpy.var()
、numpy.average()
NumPy提供的常用统计函数:
axis=None
是统计函数的标配参数
如:
如:
NumPy的梯度函数
NumPy的梯度函数只有一个:
梯度:连续值之间的变化率,即斜率。如:XY坐标轴连续三个X坐标对应的Y轴值:a,b,c,其中,b的梯度是:(c-a)/2
实例:
- 一维元素:
存在俩侧值 斜率 =(右侧值-左侧值)/ 2
只存在一侧值 斜率 =(本身-左侧值) 或者 (右侧值-本身) - 二维元素:
对于二维数组,任意一个元素的梯度存在两个方向,所以求得的梯度为两个数组对象,第一个数组表示最外层维度的梯度值,即axis=0方向的梯度(列方向);第二个数组表示第二层维度的梯度值,即axis=1方向的梯度(行方向)。
梯度的作用:
梯度反应了元素的变化率,如在进行图像、声音等批量数据处理的时候,梯度有助于我们发现图像或声音的边缘,在那些不是很平缓的地方通过梯度可以很容易发现
总结
-
数据的存取
-
随机函数
-
统计函数
-
梯度函数