天天看点

python科学计算5 ndarray对象在统计学中的应用,理论1.随机数应用1.1 生成随机数数组2.统计函数3.梯度

1.随机数应用

1.1 生成随机数数组

下表中的d0,d1,d2…dn都表示的是第几个维度上的长度

函数 说明
rand(d0,d1,…,dn) 根据d0‐dn创建随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1,…,dn) 根据d0‐dn创建随机数数组,标准正态分布
randint(low[,high,shape]) 根据shape创建随机整数或整数数组,范围是[low, high)
seed(s) 随机数种子,s是给定的种子值

1.指定shape获得随机数组

#0~1的均匀分布
print(rd.rand(2,3))
#标准正态分布
print(rd.randn(2,3))
           
[[0.38286511 0.2248728  0.1146488 ]
 [0.58301705 0.23264106 0.55651819]]
[[-2.16145292  0.34531329  0.87896938]
 [ 0.56276301  0.28843534 -1.0064815 ]]
           

2.randint函数

这个函数类似于range,不指定第一个参数默认从0开始,不指定最后一个参数默认创建单个随机数。

#给定范围的均匀分布
print(rd.randint(6))#产生单个值
print(rd.randint(10,50,(2,3)))
           

3.指定随机数种子,计算机获取随机数也是有规律的,他通过随机数种子通过某种随机算法的计算,从而获得随机数。随机数种子默认是计算机的时间。因此,我们就会感到随机数真的很随机。但是,当我们手动给他随机种子的时候,他的下一次随机数结果就会确定下来。因此,可以在测试的时候给定随机数种子,从而实现代码的观察,判断处理是否正确.

rd.seed(10)
print(rd.rand(2,3))
rd.seed(10)
print(rd.rand(2,3))
           
[[0.77132064 0.02075195 0.63364823]
 [0.74880388 0.49850701 0.22479665]]
[[0.77132064 0.02075195 0.63364823]
 [0.74880388 0.49850701 0.22479665]]
           

1.2 已知随机数数组,打乱顺序

函数 说明
shuffle(a) 根据数组a的第1轴进行随排列,改变数组x
permutation(a) 根据数组a的第1轴产生一个新的乱序数组,不改变数组x
choice(a[,size,replace,p]) 从一维数组a中以概率p(p也是一个数组,并且形状需要与a相同,默认被抽取的概率相同)抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认为False
import numpy as np
a=np.arange(20).reshape(4,5)
#1,把数组的第一个轴进行排列
print(a)
print(rd.permutation(a))#生成一个新的数组
print(rd.shuffle(a))#改变数组a,返回空值
print(a)
           
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]
[[15 16 17 18 19]
 [ 0  1  2  3  4]
 [10 11 12 13 14]
 [ 5  6  7  8  9]]
None
[[15 16 17 18 19]
 [10 11 12 13 14]
 [ 0  1  2  3  4]
 [ 5  6  7  8  9]]
           

2.choice函数。

实现一个数字越大抽取概率越大的数组

#2.根据给出的一维数组来创建
b=a.flatten()#把多维数组降维成为一维数组
print(rd.choice(b,(2,3),replace=True,p=b/np.sum(b)))
           
[[16 13  9]
 [15 11  4]]
           

1.3 根据特定概率获得数组元素

函数 说明
uniform(low,high,size) 产生具有均匀分布的数组,low起始值,high结束值,size形状
normal(loc,scale,size) 产生具有正态分布的数组,loc均值,scale标准差,size形状
poisson(lam,size) 产生具有泊松分布的数组,lam随机事件发生率,size形状

2.统计函数

1.找出单个元素

函数 说明
min(a) max(a) 计算数组a中元素的最小值、最大值
argmin(a) argmax(a) 计算数组a中元素最小值、最大值的降一维后下标
unravel_index(index, shape) 根据shape将一维下标index转换成多维下标
ptp(a) 计算数组a中元素最大值与最小值的差
median(a) 计算数组a中元素的中位数(中值)

2.求统计后的某个值,如果不给顶轴,则取所有元素的对应的值。

函数 说明
sum(a, axis=None) 根据给定轴axis计算数组a相关元素之和,axis整数或元组
mean(a, axis=None) 根据给定轴axis计算数组a相关元素的期望,axis整数或元组
average(a,axis=None,weights=None) 根据给定轴axis计算数组a相关元素的加权平均值
std(a, axis=None) 根据给定轴axis计算数组a相关元素的标准差
var(a, axis=None) 根据给定轴axis计算数组a相关元素的方差
a=np.random.randint(0,20,(3,5))
print(a)
print(np.sum(a))
print(np.sum(a,1))
print(np.sum(a,0))
           
[[ 0  9  4  5  7]
 [ 4 11 11  4 17]
 [ 3  7  6  2 11]]
101
[25 47 29]
[ 7 27 21 11 35]
           

分别表示在平行于第1个维度(在哪个维度上操作,就在框平行于轴,把平行于这个轴上的一组数据当作一个操作集)

python科学计算5 ndarray对象在统计学中的应用,理论1.随机数应用1.1 生成随机数数组2.统计函数3.梯度

在第0维度取值,平行于第0个维度

python科学计算5 ndarray对象在统计学中的应用,理论1.随机数应用1.1 生成随机数数组2.统计函数3.梯度

3.梯度

在连续的函数里,梯度就是每个点的斜率,斜率构成的函数就是原函数的导数

函数 说明
np.gradient(f) 计算数组f中元素的梯度,当f为多维时,返回每个维度梯度

1.一维数组的梯度

import numpy as np
a=np.random.randint(0,20,(5))#一个五个元素的一维数组
print(a)
print(np.gradient(a))#梯度值
#开头第二个-第一个元素/1
#结尾最后一个-倒数第二个元素/1
#中间的我的前一个元素-我的后一个元素/2
           
[13  8  9  5  0]
[-5.  -2.  -1.5 -4.5 -5. ]
           

来我们分析一下,下标为0的这样计算(8-13)/1=-5。下标为1(9-13)/2=-2.。下标为2的(5-8)/2=-1.5,下标为3的(0-9)/2=-4.5,下标为4的(0-5)/1=-5。中间的元素计算方法都想同年,第一个和最后一个元素计算方法有所差别

2.多维数组的梯度

print(a)
#返回的是一个列表
print(type(np.gradient(a)))
print(np.gradient(a))

           

返回的是一个列表,列表中下标为i,表示在第几个维度上取梯度

<class 'list'>
[array([[ -3. ,  17. ,   5. ,  12. ,  15. ],
       [  5. ,   3. ,  -4.5,   3. ,   4. ],
       [ 13. , -11. , -14. ,  -6. ,  -7. ]]), array([[ -6. ,   3. ,   0. ,  -5.5,   1. ],
       [ 14. ,   7. ,  -2.5,  -0.5,   4. ],
       [-10. ,  -6.5,   0. ,   3. ,   3. ]])]
           

先在第0维度上取梯度

再第1维度上取梯度

python科学计算5 ndarray对象在统计学中的应用,理论1.随机数应用1.1 生成随机数数组2.统计函数3.梯度
python科学计算5 ndarray对象在统计学中的应用,理论1.随机数应用1.1 生成随机数数组2.统计函数3.梯度