numpy的用法(二)

"""
    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_integersrandint取代
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,sinharsin等,其他三角函数同理
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是要预测的序列,xpfp是参考序列
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
Python中的NumPy是一个用于科学计算和数据分析的基础包,提供了大量的矩阵和数组的计算函数。安装NumPy可以使用pip命令:pip install numpy。要查看NumPy的版本,可以使用numpy.__version__。在代码中导入NumPy时,通常使用import numpy as np。 NumPy的主要功能之一是创建ndarray(N-dimensional array)。我们可以使用np.array()函数来创建多维数组。例如,使用np.array([1, 2, 3])可以创建一个一维数组,使用np.array([[1, 2], [3, 4]])可以创建一个维数组。 除了np.array()函数外,NumPy还提供了其他创建数组的方法,比如使用np.zeros()创建全零数组,np.ones()创建全一数组,np.random.randn()创建随机数组等。 另外,如果想对矩阵进行转置,可以使用numpy的transpose()函数来实现。例如,对于一个维数组a,可以使用np.transpose(a)来实现转置操作。 总结起来,Python中的NumPy是一个功能强大的科学计算和数据分析的基础包,可以用来创建和操作多维数组,以及进行矩阵的转置操作等。这些功能可以帮助我们进行高效的数值计算和数据处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [numpy 用法总结](https://blog.csdn.net/Dear_learner/article/details/125018228)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [python-numpy的详细使用](https://blog.csdn.net/wander_ing/article/details/105763309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Python 使用Numpy对矩阵进行转置的方法](https://download.csdn.net/download/weixin_38693192/12864784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值