""" random模块 """ import numpy.random as rd # 生成2X3X4的来自均匀分布的数组 rd.rand(2, 3, 4) Out[4]: array([[[ 0.93382614, 0.77450501, 0.95410355, 0.04770307], [ 0.65003083, 0.3147345 , 0.02568974, 0.922629 ], [ 0.30233921, 0.1001662 , 0.03907051, 0.51182916]], [[ 0.06396201, 0.67013492, 0.91161546, 0.17040448], [ 0.19141752, 0.14028097, 0.14331341, 0.20008318], [ 0.25290587, 0.48377802, 0.5497468 , 0.74594061]]]) # 来自均匀分布 rd.random(size=(2, 3)) Out[5]: array([[ 0.29150479, 0.59143257, 0.58292501], [ 0.89306582, 0.10973415, 0.11697055]]) rd.ranf(size=(2, 3)) Out[6]: array([[ 0.2617385 , 0.1599286 , 0.30694021], [ 0.60681763, 0.44753321, 0.18515647]]) rd.sample(size=(2, 3)) Out[7]: array([[ 0.24403489, 0.02279442, 0.8159746 ], [ 0.42906045, 0.41219516, 0.79223017]]) rd.random_sample(size=(2, 3)) Out[8]: array([[ 0.54655654, 0.79401041, 0.41654001], [ 0.07187702, 0.75150598, 0.38958451]]) rd.uniform(low= 0, high= 2, size= 3) Out[9]: array([ 1.40633058, 0.64629179, 0.01713603]) # 正态分布(均值,方差,大小) rd.normal(1, 15, size= 3) Out[10]: array([ 7.47301292, 9.66098473, -14.71070601]) # 标准正态 rd.randn(2, 3) Out[11]: array([[ 1.13439468, -0.96094607, -2.02854464], [ 0.41641961, 1.36355043, -0.23367182]]) rd.standard_normal(size= (2,3)) Out[12]: array([[-0.75764351, 0.9495077 , 0.17615699], [ 1.32729934, -0.73403758, -1.67835488]]) # 随机整数(最小值,最大值,大小),生成区间为[最小值,最大值),random_integers被randint取代 rd.randint(1, 100, (2,3)) Out[13]: array([[70, 1, 21], [ 1, 46, 74]]) # 按概率p随机抽样 rd.choice([1,3,4], size= (2,3), p =None) Out[14]: array([[4, 3, 4], [3, 1, 4]]) # 生成随机字节,长度为3 rd.bytes(3) Out[15]: b'\xb8\xd5\n' # 洗牌,打乱顺序 a = [2,5,3,1,2,1,1] rd.shuffle(a) a Out[16]: [3, 2, 1, 1, 2, 5, 1] rd.permutation(a) Out[17]: array([1, 3, 1, 5, 2, 1, 2]) # 生成bate分布随机数 rd.beta(a= 3, b= 4, size=(2,2)) Out[18]: array([[ 0.43829424, 0.6011375 ], [ 0.41448452, 0.48300991]]) # 生成pareto分布随机数 rd.pareto(a= 2,size= 3) Out[19]: array([ 1.30300386, 0.31756334, 0.58852348]) # 生成binomal分布随机数 rd.binomial(n= 5, p= 0.7, size= (2,2)) Out[20]: array([[4, 4], [5, 5]]) # 生成负binomal分布随机数 rd.negative_binomial(n= 5, p= 0.7, size= (2,2)) Out[21]: array([[1, 1], [2, 5]]) # 生成卡方分布随机数 rd.chisquare(df= 3, size= (2,2)) Out[22]: array([[ 3.05599242, 1.80006432], [ 8.97512769, 2.32145672]]) # 生成泊松分布随机数 rd.poisson(3, size= (2,2)) Out[23]: array([[2, 5], [5, 3]]) # 生成f分布随机数 rd.f(dfnum= 3, dfden= 4, size= (2,2)) Out[24]: array([[ 1.50453811, 4.59191174], [ 0.42768475, 2.59637648]]) # 生成指数分布随机数 rd.exponential(scale= 3, size= (2,2)) Out[25]: array([[ 1.12446905, 0.03168315], [ 0.73812311, 1.44792283]]) # 生成gamma分布随机数 rd.gamma(shape= 3, scale= 3, size= 3) Out[26]: array([ 8.70806423, 7.72566325, 8.26060271]) # 生成几何分布随机数 rd.geometric(p= 0.2, size= 4) Out[27]: array([ 6, 9, 6, 16]) # 超几何 rd.hypergeometric(20, 5, 2, (2,2)) Out[28]: array([[1, 2], [2, 2]]) # 生成逻辑分布随机数 rd.logistic(loc= 2,scale= 2,size= 3) Out[29]: array([-7.9585084 , 2.81539432, -1.25049322]) # 生成对数正态分布随机数 rd.lognormal(2, 24, size= (2,3)) Out[30]: array([[ 1.25007966e-04, 2.28744343e-08, 4.85700990e+10], [ 3.20011198e-06, 4.64902108e+11, 3.87050496e-07]]) # 生成对数级数分布随机数 rd.logseries(p= 0.7, size= (2,3)) Out[47]: array([[1, 1, 1], [1, 1, 1]]) # 生成多项分布随机数 rd.multinomial(n= 5, pvals= (0.3, 0.1, 0.2, 0.3, 0.1),size= (2,5)) Out[51]: array([[[0, 1, 2, 2, 0], [2, 0, 1, 2, 0], [3, 0, 0, 1, 1], [2, 0, 1, 1, 1], [5, 0, 0, 0, 0]], [[0, 1, 1, 3, 0], [2, 0, 1, 1, 1], [3, 0, 0, 2, 0], [1, 1, 1, 2, 0], [3, 1, 0, 1, 0]]]) # 生成多元正态分布随机数 rd.multivariate_normal(mean= (2, 4), cov= ([[10, 3],[4, 5]]), size= (2,3)) # RuntimeWarning: covariance is not positive-semidefinite. Out[52]: array([[[ 0.4554524 , 2.52760375], [ 3.55029692, 5.92599117], [-2.24029636, 5.57890532]], [[ 3.23529465, 6.22273229], [-0.81315699, 3.638728 ], [-0.2201177 , 3.45059657]]]) 此外还有,gumbel耿贝尔,lapace拉普拉斯,dirichlet狄利克雷, rayleigh瑞丽,weibul威布尔,standard_cauchy等分布 竟然没有t分布 """ 简单而实用的计算功能 """ import numpy as np # pi和无穷数 np.pi, np.Inf, np.Infinity, np.NAN, np.nan, np.NaN, np.NZERO Out[3]: (3.141592653589793, inf, inf, np.NAN, np.nan, np.NaN, np.NZERO) # 含有无穷的部分计算 a = [np.Inf, 0, 1, 2, 5] np.nanargmax(a, axis= 0) Out[4]: 0 np.nancumprod(a) Out[5]: array([ inf, nan, nan, nan, nan]) np.nanmean(a) Out[6]: inf np.nanmin(a) Out[7]: 0.0 # 无穷的有穷化,转化成计算机接收的最值 np.nan_to_num(a, copy= True) Out[8]: array([ 1.79769313e+308, 0.00000000e+000, 1.00000000e+000, 2.00000000e+000, 5.00000000e+000]) # 正弦,余弦 np.sin(a) Out[9]: array([ nan, 0. , 0.84147098, 0.90929743, -0.95892427]) np.cos(a) Out[10]: array([ nan, 1. , 0.54030231, -0.41614684, 0.28366219]) # sinc,conc,sinh,arsin等,其他三角函数同理 np.sinc(a) Out[11]: # return sin(y)/y array([ nan, 1.00000000e+00, 3.89817183e-17, -3.89817183e-17, 3.89817183e-17]) np.sinh(a) Out[12]: array([ inf, 0. , 1.17520119, 3.62686041, 74.20321058]) np.arcsin(a) Out[13]: array([ nan, 0. , 1.57079633, nan, nan]) # 加,减,乘,除,地板除,幂和求余数运算 np.add([1,2,3],[2,3,4]) Out[14]: array([3, 5, 7]) np.subtract([1,2,3],[2,3,4]) Out[15]: array([-1, -1, -1]) np.multiply([1,2,3],[2,3,4]) Out[16]: array([ 2, 6, 12]) np.divide([1,2,3],[2,3,4]) Out[17]: array([ 0.5 , 0.66666667, 0.75 ]) np.floor_divide([1,2,3],[2,3,4]) Out[18]: array([0, 0, 0], dtype=int32) np.power([1,2,3],[2,3,4]) Out[19]: array([ 1, 8, 81], dtype=int32) np.remainder([1,2,3],[2,3,4]), np.mod([1,2,3],[2,3,4]) Out[20]: (array([1, 2, 3], dtype=int32), array([1, 2, 3], dtype=int32)) # 求绝对值和相反数、倒数 np.abs([-1, 2, 4]) Out[21]: array([1, 2, 4]) np.negative([-1, 2, 4]) Out[22]: array([ 1, -2, -4]) np.reciprocal([-1, 2, 4],dtype= np.float) Out[23]: array([-1. , 0.5 , 0.25]) # 求标准差 a = np.array([-1, 2, 4]) simga = np.sqrt(np.sum(np.square(a - np.mean(a)))) simga Out[23]: 3.5590260840104371 # 求指数对数 np.exp(a) Out[24]: array([ 0.36787944, 7.3890561 , 54.59815003]) np.log(a) Out[25]: array([ nan, 0.69314718, 1.38629436]) np.log2(a) Out[26]: array([ nan, 1., 2.]) np.log1p(a) Out[27]: array([ -inf, 1.09861229, 1.60943791]) np.log10(a) Out[28]: array([ nan, 0.30103 , 0.60205999]) # 符号判断 np.sign(a) Out[29]: array([-1, 1, 1]) np.signbit(a) Out[30]: array([ True, False, False], dtype=bool) # 求近似值 np.ceil([0.5, 0.51, 0.4, 1.49, 2.1]) Out[31]: array([ 1., 1., 1., 2., 3.]) np.floor([0.5, 0.51, 0.4, 1.49, 2.1]) Out[32]: array([ 0., 0., 0., 1., 2.]) np.rint([0.5, 0.51, 0.4, 1.49, 2.1]) Out[33]: array([ 0., 1., 0., 1., 2.]) np.round([0.5, 0.51, 0.4, 1.49, 2.1]) Out[34]: array([ 0., 1., 0., 1., 2.]) np.around([0.5, 0.51, 0.4, 1.49, 2.1]) Out[35]: array([ 0., 1., 0., 1., 2.]) # 修剪极值 np.clip(np.arange(9),a_min= 2,a_max= 7) Out[36]: array([2, 2, 2, 3, 4, 5, 6, 7, 7]) # 求梯度 np.gradient([3, 5, 7, 4, 3]) Out[37]: array([ 2. , 2. , -0.5, -2. , -1. ]) # 检查数组中是否包含2,5两个元素 a Out[38]: array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) np.in1d(a,[2, 5]) Out[39]: array([False, False, True, False, False, True, False, False, False], dtype=bool) # 多维数组返回一维对角元素,一维数组返回对角矩阵 np.diag(a) Out[40]: array([0, 4, 8]) np.diag([1, 2, 3]) Out[41]: array([[1, 0, 0], [0, 2, 0], [0, 0, 3]]) # 生成对角矩阵,当传入一维数组时,k+1是维数,当传入多维数组时,k是偏离主对角线的行数 np.diagflat(v= 4,k= 2) Out[42]: array([[0, 0, 4], [0, 0, 0], [0, 0, 0]]) np.diagflat(a, k= 0) Out[43]: array([[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 0, 0, 0, 0, 0, 0], [0, 0, 0, 3, 0, 0, 0, 0, 0], [0, 0, 0, 0, 4, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0], [0, 0, 0, 0, 0, 0, 6, 0, 0], [0, 0, 0, 0, 0, 0, 0, 7, 0], [0, 0, 0, 0, 0, 0, 0, 0, 8]]) # 数组乘法 a,b = np.ogrid[0:5:2, 1:6:2] np.dot(a, b) Out[44]: array([[ 0, 0, 0], [ 2, 6, 10], [ 4, 12, 20]]) # 差乘 >>> x = [1, 2] >>> y = [4, 5, 6] >>> np.cross(x, y) array([12, -6, -3]) # 求迹 np.trace(np.dot(a, b)) Out[45]: 26 # 排序 np.sort([3, 5, 2, 1]) Out[46]: array([1, 2, 3, 5]) # 返回交集\并集并排序 np.intersect1d([3, 5, 2, 1], [2,4,1,7]) Out[47]: array([1, 2]) np.union1d([3, 5, 2, 1], [2,4,1,7]) Out[48]: array([1, 2, 3, 4, 5, 7]) # 返回差和对称差 np.setdiff1d([3, 5, 2, 1], [2,4,1,7]) Out[49]: array([3, 5]) np.setxor1d([3, 5, 2, 1], [2,4,1,7]) Out[50]: array([3, 4, 5, 7]) # 行加、列加 np.r_[[3, 5, 2, 1], [2,4,1,7]] Out[51]: array([3, 5, 2, 1, 2, 4, 1, 7]) np.c_[[3, 5, 2, 1], [2,4,1,7]] Out[52]: array([[3, 2], [5, 4], [2, 1], [1, 7]]) # 差分,n是差分阶数 np.diff([3, 5, 2 ,1], n= 1, axis= -1) Out[53]: array([ 2, -3, -1]) # 一阶差分,在差分结果收尾补入两个数 np.ediff1d([3, 5, 2 ,1], to_begin= 1, to_end= -1) Out[54]: array([ 1, 2, -3, -1, -1]) # 根据复合梯形规则求积分 np.trapz([1, 4, 3, 5], x= None, dx= 0.1, axis= -1) Out[56]: 1.0 # 数组元素乘积 np.prod([3, 5, 2 ,1], axis= None, dtype= None, out= None,keepdims= False) Out[57]: 30 # 分部累计乘积 np.cumprod([3, 5, 2 ,1], axis= None, dtype= None, out= None) Out[58]: array([ 3, 15, 30, 30], dtype=int32) # 返回复数角度,deg=0表示弧度制表示 np.angle(z, deg= 0) Out[59]: array([ 0.98279372, 0.46364761]) # 复数实部、虚部和共轭 np.real(z), np.imag(z), np.conj(z), np.conjugate(z) Out[60]: (array([ 2., 2.]), array([ 3., 1.]), array([ 2.-3.j, 2.-1.j]), array([ 2.-3.j, 2.-1.j])) # 最大,最小值 np.max(z, axis= -1, out= None, keepdims= False), np.min(z) # 同np.amax(z, axis= -1, out= None, keepdims= False), np.amin(z) Out[61]: ((2+3j), (2+1j)) # 返回大、小数组 np.maximum([1,2,3],[1,3,5]), np.minimum([1,2,3],[1,3,5]) Out[62]: (array([1, 3, 5]), array([1, 2, 3])) np.fmax([1,2,3],[1,3,5]), np.fmin([1,2,3],[1,3,5]) Out[63]: (array([1, 3, 5]), array([1, 2, 3])) # 返回最值索引 np.argmax([1,2,3]), np.argmin([1,2,3]) Out[64]: (2, 0) # 生成数轴刻度 np.ix_([1, 3, 5, 7, 9],[2, 4, 6, 8 ,10]) Out[65]: (array([[1], [3], [5], [7], [9]]), array([[ 2, 4, 6, 8, 10]])) # 返回从零到len(array)的频数 np.bincount(np.random.randint(4, 20, size= 1000)) Out[66]: array([ 0, 0, 0, 0, 66, 55, 73, 55, 68, 60, 58, 73, 73, 59, 57, 69, 58, 49, 59, 68], dtype=int64) # 定义多项式,多项式求根,由多项式根,还原多项式系数 p = np.poly1d([1, -3, 3, -1]) p Out[67]: poly1d([ 1, -3, 3, -1]) r = np.roots(p) r Out[68]: array([ 1.00000657 +0.00000000e+00j, 0.99999671 +5.69145455e-06j, 0.99999671 -5.69145455e-06j]) p = np.poly(r) p Out[69]: array([ 1., -3., 3., -1.]) # 线性插值,x是要预测的序列,xp、fp是参考序列 np.interp(x= [3.5, 2], xp= [1, 3, 5, 7], fp= [12, 14, 16, 18.1], left= None, right= None, period= None) Out[70]: array([ 14.5, 13. ]) # 求序列的百分位数 >>> a = np.array([[10, 7, 4], [3, 2, 1]]) >>> a array([[10, 7, 4], [ 3, 2, 1]]) >>> np.percentile(a, 50) 3.5 >>> np.percentile(a, 50, axis=0) array([[ 6.5, 4.5, 2.5]]) >>> np.percentile(a, 50, axis=1) array([ 7., 2.]) >>> np.percentile(a, 50, axis=1, keepdims=True) array([[ 7.], [ 2.]]) """ 金融函数 """ # 求终值,rate利率,nper期数,pmt支付额,pv现值 np.fv(rate= 0.05/12, nper= 10*12, pmt= -100, pv= -100, when= 'end') Out[71]: 15692.928894335748 # 求现值 np.pv(rate= 0.05/12, nper= 10*12, pmt= -100, fv= 15692.93, when= 'end') Out[72]: -100.00067131625819 # 求投资期 np.nper(rate= 0.05/12, pmt= -100, pv= -100, fv= 15692.93, when= 'end') Out[73]: 120.0000066992251 # 求利率 np.rate(nper= 10*12, pmt= -100, pv= -100, fv= 15692.93, when= 'end') Out[74]: 0.0041666677646266716 # 求每期支付额 np.pmt(rate= 0.05/12,nper= 10*12, pv= -100, fv= 15692.93, when= 'end') Out[75]: -100.00000712035047 """ 时间函数 """ # datetime时间用法 >>> np.arange('2005-02', '2005-03', dtype='datetime64[D]') array(['2005-02-01', '2005-02-02', '2005-02-03', '2005-02-04', '2005-02-05', '2005-02-06', '2005-02-07', '2005-02-08', '2005-02-09', '2005-02-10', '2005-02-11', '2005-02-12', '2005-02-13', '2005-02-14', '2005-02-15', '2005-02-16', '2005-02-17', '2005-02-18', '2005-02-19', '2005-02-20', '2005-02-21', '2005-02-22', '2005-02-23', '2005-02-24', '2005-02-25', '2005-02-26', '2005-02-27', '2005-02-28'], dtype='datetime64[D]') >>> np.datetime64('2009-01-01') - np.datetime64('2008-01-01') numpy.timedelta64(366,'D') >>> np.datetime64('2009') + np.timedelta64(20, 'D') numpy.datetime64('2009-01-21') >>> np.datetime64('2011-06-15T00:00') + np.timedelta64(12, 'h') numpy.datetime64('2011-06-15T12:00-0500') # 第二个工作日,roll往哪个方向计算 np.busday_offset('2011-06-23', 2, roll='forward') >>>numpy.datetime64('2011-06-27') # 是不是工作日 np.is_busday(np.datetime64('2011-07-16'), weekmask="Sat Sun") >>>True # 计算工作日 np.busday_count(np.datetime64('2011-07-18'), np.datetime64('2011-07-11')) >>>-5
numpy的用法(二)
最新推荐文章于 2024-03-31 09:59:59 发布