栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

NumPy(三)—— 排序/随机变量/统计/线性代数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

NumPy(三)—— 排序/随机变量/统计/线性代数

Python模块 —— NumPy
  • NumPy(三)—— 排序/随机变量/统计/线性代数
    • 五、排序/随机变量/统计/线性代数等
      • 5.1 排序搜索计数
      • 5.2 集合操作
      • 5.3 输入输出
        • 5.3.1 二进制文件
        • 5.3.2 文本文件
      • 5.4 随机变量(np.random)
        • 5.4.1 离散型随机变量
        • 5.4.2 连续型随机变量
        • 5.4.3 其他随机函数
      • 5.5 统计相关
      • 5.6 线性代数
        • 5.6.1 创建矩阵
        • 5.6.2 矩阵函数
      • 5.7 线性代数小练习

NumPy(三)—— 排序/随机变量/统计/线性代数

大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。

五、排序/随机变量/统计/线性代数等 5.1 排序搜索计数


''' sort、argsort '''
import numpy as np
x = np.random.randint(10,20,15)
print(x,np.sort(x),sep='nn')
for i in x.argsort():
    print(x[i], end=' ')
    
# >> [12 15 12 19 15 13 13 11 16 15 12 14 11 12 18]
# >> [11 11 12 12 12 12 13 13 14 15 15 15 16 18 19]
# >> 11 11 12 12 12 12 13 13 14 15 15 15 16 18 19 


''' 最大/小值索引 '''
import numpy as np
a = np.array([10, 9, 20, 0, 17, np.nan])
print('最大值(argmax,含NaN):{}n最大值(nanargmax,不含NaN):{}n'.format(a.argmax(),np.nanargmax(a)))
print('最小值(argmin,含NaN):{}n最小值(nanargmin,不含NaN):{}n'.format(a.argmin(),np.nanargmin(a)))

# >> 最大值(argmax,含NaN):5
# >> 最大值(nanargmax,不含NaN):2
# >> 最小值(argmin,含NaN):5
# >> 最小值(nanargmin,不含NaN):3

5.2 集合操作


5.3 输入输出 5.3.1 二进制文件

   save()、savez() 和 load() 函数以 numpy 专用的二进制类型(.npy、.npz)保存和读取数据,这三个函数会自动处理ndim、dtype、shape等信息,使用它们读写数组非常方便,但save()和savez()输出的文件很难与其它语言编写的程序兼容。

5.3.2 文本文件

   savetxt()、loadtxt() 和 genfromtxt() 函数用来存储和读取文本文件(如.TXT、.CSV等)。genfromtxt() 比 loadtxt() 更加强大,可对缺失数据进行处理。

''' 二进制文件,save、savez、load '''
import numpy as np
a = np.random.randint(21,29,15)
b = np.random.randint(26,33,15)
print(a,b)
np.save('test1',a)         # 将1个数组保存成'test1'
np.savez('test0',a,b)    # 将2个数组保存成'test0'
t1 = np.load('test1.npy')   # 读取 npy
t0 = np.load('test0.npz') # 读取 npz 
print(t1)
t0.files # 查看各个数组名称
print(t0['arr_0'],t0['arr_1'])


''' 文本文件,savetxt、loadtxt、genfromtxt '''
np.savetxt('test1',a)         # 将1个数组保存成test1文本文件
np.savetxt('test0',(a,b))    # 将2个数组保存成test0文本文件
t1 = np.loadtxt('test1')      # 读取文本文件
t0 = np.loadtxt('test0')      # 读取文本文件
print(t1,'n',t0)
np.genfromtxt('test0')

5.4 随机变量(np.random)

   numpy.random 模块对Python内置的random进行了补充,增加了一些用于高效生成多种概率分布的样本值的函数,如正态分布、泊松分布等。

np.random.seed(seed=None)
   seed() 确定随机数生成器的种子
   如果使用相同的seed()值,则每次生成的随机数都相同;如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同;
   在对数据进行预处理时,经常加入新的操作或改变处理策略,此时如果伴随着随机操作,最好还是指定唯一的随机种子,避免由于随机的差异对结果产生影响。

import numpy as np
np.random.seed(20)
a = np.random.randint(11,20,6)
b = np.random.randint(11,20,6)

np.random.seed(20)
c = np.random.randint(11,20,6)
np.random.seed(20)
d = np.random.randint(11,20,6)

print(a,b)
print(c,d)

# >> [14 15 17 18 13 11] [17 19 16 14 11 17]
# >> [14 15 17 18 13 11] [14 15 17 18 13 11]

5.4.1 离散型随机变量

定义
   设X是一个随机变量,若它所有可能的取值只有有限个或可数无穷个,则称X为一个离散型随机变量。
设离散型随机变量X的所有可能取值为Xi(i=1,2,···),称 P(X = Xi) = Pi(i=1,2,···) 为X的概率函数/概率分布。

常见的离散型随机变量的分布
   0-1分布、二项分布、泊松分布、超几何分布等;

import numpy as np

''' 二项分布:
一次抛5枚硬币,每硬币正面朝上概率为0.5,做10次试验,求每次试验发生正面朝上的硬币个数'''
a = np.random.binomial(5, 0.5, 10)
print(a)

''' 泊松分布 '''
b = np.random.poisson(7,10)
print(b)

''' 超几何分布:
一共20只动物里有7只是狗,抽取12只里面狗的数量(无放回抽样) '''
c = np.random.hypergeometric(7, 13, 12, size=10)
print(c)

# >> [2 3 4 1 3 2 3 2 2 2]
# >> [3 6 4 7 3 4 5 8 7 8]
# >> [5 3 4 5 5 3 4 3 3 4]
5.4.2 连续型随机变量

定义
   连续型随机变量是指如果随机变量X的所有可能取值不可以逐个列举出来,而是取数轴上某一区间内的任一点的随机变量。

常见的连续型随机变量的分布
   均匀分布、指数分布、正态分布等;

import numpy as np

''' 均匀分布:
在low到high范围内,创建大小为size的均匀分布的随机数'''
a = np.random.uniform(1, 10, 3)
print(a) 

''' 指数分布 '''
b = np.random.exponential(1, 3)
print(b)

''' 正态分布 '''
c = np.random.normal(2, 2, 3)
print(c)

# >> [4.55567331 4.73945202 2.80455276]
# >> [1.19284369 0.97085477 1.01743578]
# >> [-0.65318006  1.36894511  2.23444435]
5.4.3 其他随机函数



5.5 统计相关

   常见的函数有:最大值(amax)、最小值(amin)、极差(ptp,即最大值-最小值)、分位数(percentile)、中位数(median)、(算术)平均值(mean)、加权平均值(average)、方差(var)、标准差(std)、协方差(cov)、相关系数(corrcoef)等函数,详见NumPy(二)—— 切片索引、数组操作、函数的‘4.3数学函数’版块。

''' 直方图:返回数组中每个元素在bins中的索引 
np.digitize(a, bins, right=False) '''

import numpy as np
a = np.array([10,6,11,15,16])
bins = [1,6,11,16,21]
b = np.digitize(a,bins)
print('数组中每个元素在bins中的索引:', b )
for i in range(a.size):
    print('{} <= {} < {}'.format(bins[b[i]-1],a[i],bins[b[i]]))

# >> 数组中每个元素在bins中的索引: [2 2 3 3 4]
# >> 6 <= 10 < 11
# >> 6 <= 6 < 11
# >> 11 <= 11 < 16
# >> 11 <= 15 < 16
# >> 16 <= 16 < 21

5.6 线性代数

5.6.1 创建矩阵

   详见下图,此外还有些特殊的矩阵,如下:
   创建零矩阵(zeros)、单位矩阵(identity、eye)等等,详见NumPy(一)—— 数据类型、创建数组的‘1.5 创建数组’版块。

5.6.2 矩阵函数

   数组中的函数在矩阵中基本可以应用,此外还有秩(matrix_rank)、迹(trace)、行列式(det)、逆矩阵(inv)、矩阵分解、特征值、特征向量等,详见下图:

数组间的乘法,图解:

从上图,我们基本可以理解dot、vdot、inner、matmul、multiply之间的区别。

5.7 线性代数小练习

计算两个数组a和数组b之间的欧氏距离

import numpy as np
a = np.array([1,2,3,4,5])
b = np.array([4,5,6,7,8])

# 方法一
d1 = np.sqrt(np.sum((a-b)**2))
print(d1)

# 方法二
d2 = np.linalg.norm(a-b)
print(d2)

# >> 6.708203932499369
# >> 6.708203932499369

谢谢大家

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856137.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号