用于数组的文件输入输出
NumPy能够读写磁盘上的文件数据或二进制数据
将数组以二进制格式保存到磁盘
- np.save和no.load是读写磁盘数组数据的两个主要函数。默认情况下,数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中
- np.savez可以将多个数组保存到一个压缩文件中,将数组以关键字参数的形式传入即可
- 加载.npz文件时,会得到一个类似字典的对象,该对象会对各个数组进行延迟加载
import numpy as np
arr = np.arange(10)
np.save('some_array',arr)
np.load('some_array.npy')
np.savez('double array',a = arr, b=arr)
array = np.load("double array.npz")
array['a']
存取文本文件
- np.loadtxt和np.genfromtxt可以将数加载到普通的NumPy数组中,可以指定各种分隔符、针对特定列的转换器函数、需要跳过的行数等
- np.savetxt将数组写入以某种分隔符隔开的文本文件中。面向的是结构化数组和缺失数据处理
# 从文本文件中加载数组,并指定用逗号分隔开
arr = np.loadtxt('array_ex.txt',delimiter=',')
线性代数
- dot函数可用于矩阵乘法,可作为numpy方法调用也可作为实例方法调用
- numpy.linalg中有一组标准的矩阵分解运算,及如求逆和行列式之类的函数
常用的numpy.linalg函数
# 以一维数组的形式返回方阵的对角线(或非对角线)元素,或将一维数组转换为方阵(非对角线元素为0)
arr1 = np.diag(array2)
# 矩阵乘法
arr2 = np.dot(array1,array2)
# 计算对角线元素的和
arr3 = np.trace(array2)
# 计算矩阵行列式
arr4 = np.linalg.det(array3)
# 计算方阵的本征值和本征向量
arr5 = np.linalg.eig()
# 计算方阵的逆
arr6 = np.linalg.inv()
# 计算矩阵的Moore——Penrose伪逆
arr7 = np.linalg.pinv()
# 计算QR分解
arr8 = np.linalg.qr()
# 计算奇异值分解(SVD)
arr9 = np.linalg.svd()
# 解线性方程组Ax=b,其中A为一个方阵
arr10 = np.linalg.solve()
# 计算Ax=b的最小二乘解
arr11 = np.linalg.lstsq()
随机数生成
- numpy.random模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数
- 如果需要产生大量样本值,numpy.random很快
部分numpy.random函数
# 确定随机数生成器的种子seed( )
# seed( ) 用于指定随机数生成时所用算法开始的整数值。
# 1.如果使用相同的seed( )值,则每次生成的随即数都相同;
# 2.如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
np.random.seed(2)
# 返回一个序列的随机排列,或返回一个随机排列的范围
arr1 = np.random.permutation(array)
arr1
# 对一个序列本身进行随机排列
np.random.shuffle(array)
array
# 产生x个均匀分布的样本值,传入参数代表生成个数(可用seed设置算法开始的整数值)
sample1 = np.random.rand(2)
# 从给定上下限范围内随机地选取整数(第一二个参数表示上下限,第三个参数表示个数)
sample2 = np.random.randint(2,8,6)
# 产生标准正态分布的样本值
sample3 = np.random.randn(8)
# 产生二项分布的样本值 numpy.random.binomial(n,p,size=None)
# n:int型或者一个int型的数组,大于等于0,接受浮点数但是会被变成整数来使用。
# p:float或者一组float的数组,大于等于0且小于等于1.
# size:可选项,int或者int的元祖,表示的输出的大小,如果提供了size,例如(m,n,k),那么会返回m*n*k个样本。
# 如果size=None,也就是默认没有的情况,当n和p都是一个数字的时候只会返回一个值,否则返回的是np.broadcast(n,p).size个样本.
sample4 = np.random.binomial(8,0.4,6)
# 产生正态分布(高斯分布)的样本值 numpy.random.normal(loc,scale,size=shape) ,意义如下:
# 参数loc(float):正态分布的均值,对应着这个分布的中心。
# 参数scale(float):正态分布的标准差,对应分布的宽度,scale越大,正态分布的曲线越矮胖,scale越小,曲线越高瘦。
# 参数size(int 或者整数元组):输出的值赋在shape里,默认为None。
sample5 = np.random.normal(2,1,(2,2))
# 产生Beta分布的样本值 numpy.random.beta(a, b, size=None)
sample6 = np.random.beta(3,1,(2,2))
# 产生卡方分布的样本值 numpy.random.chisquare(df,size)
sample7 = np.random.chisquare(5,(2,3))
# 产生Gamma分布的样本值 numpy.random.gamma(shape, scale=1.0, size=None)
sample8 = np.random.gamma(2,2,10)
# 产生在[0,1)中均匀分布的样本值 np.random.uniform(low=0.0, high=1.0, size=None)
sample9 = np.random.uniform(2, 5, 3)