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

复习自用3:NumPy数值计算基础

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

复习自用3:NumPy数值计算基础

1. 掌握NumPy数组对象ndarray

1.1 创建数组对象

#ndarray是储存单一数据类型的多维数组

#数组创建
import numpy as np
arr1=np.array([1,2,3,4])
arr2=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])


#数组属性
print(arr2.ndim)
print(arr2.shape)
print(arr2.dtype)
print(arr2.size)
print(arr2.itemsize)
arr2.shape=4,3    #重新设置shape


#使用arange函数创建0~1之间步长为0.1的数字
np.arange(0,1,0.1)

#使用linspace函数创建0~1之间的12个数字
np.linspace(0,1,12)

#使用logspace函数创建等比数列
np.logspace(0,2,20)

#使用zeros函数创建全零数组
np.zeros(2,3)

#使用eye函数创建单位矩阵
np.eye(3)

#使用diag函数创建只包含主对角线元素的数组
np.diag([1,2,3,4])

#使用ones函数创建全一数组
np.ones((5,3))


#数组类型转换
np.float64(42)
np.int8(42.0)
np.bool(42)


#创建数据类型并用其创建数组
df=np.dtype([("name",np.str_,40),("numitems",np.int64),("price",np.float64)])
itemz=np.array([("tomatoes",42,4.14),("cabbages",13,1.72)],dtype=df)

1.2 生成随机数

#无约束条件下的随机数
arr=np.random.random(100)

#服从均匀分布的随机数
arr=np.random.rand(10,5)

#服从正态分布的随机数
arr=np.random.randn(10,5)

#给定范围的随机数
arr=np.random.randint(2,10,size=[2,5])

#其他常用模块
#np.random.xx
#xx=seed,permutation,shuffle,binomial(二项分布),normal(正态高斯分布),beta,chisquare(卡方),gamma,uniform(在[0,1)均匀分布)

1.3 通过索引访问数组

#一维数组的索引

arr=np.arange(10)
print(arr[5])

print(arr[3:5])
print(arr[:5])
print(arr[1:-1:2])
print(arr[5:1:-2])


#二维数组的索引

arr=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

print(arr[0,3:5])
print(arr[1:,2:])
print(arr[:,2])
print(arr[(0,1,2),(1,2,3)])

mask=np.array([1,0,1],dtype=np.bool)
#按照1出现的位置,表示索引arr数组的第0、2行
# mask,2表示索引第0、2行第2列的所有元素
print(arr[mask,2])

1.3 变换数组的形态

arr=np.arange(12)

#使用reshape函数设置数组形状,默认按照行顺序
np.reshape(3,4)
print(np.reshape(3,4).ndim)




#使用ravel函数展平数组,默认按照行顺序
arr.ravel()

#使用flatten函数展平数组
arr.flatten    #横向展平
arr.flatten('F')     #纵向展平




#使用hstack函数横向组合数组
np.hstack((arr1,arr2))

#使用vstack函数总想组合数组
np.vstack((arr1,arr2))

#使用concatenate函数组合数组
np.concatenate((arr1,arr2),axis=0,out=None)    #纵向(默认)
np.concatenate((arr1,arr2),axis=1,out=None)    #横向行拼接



#使用hsplit函数横向分割数组
np.hsplit(arr,2)
#使用vsplit函数纵向分割数组
np.vsplit(arr,2)
#使用split函数分割数组
np.split(arr,2,axis=1)    #横向分割
np.split(arr,2,axis=0)    #纵向分割

2. 掌握NumPy矩阵与通用函数

2.1 创建NumPy矩阵

#使用mat函数创建矩阵
matr1=np.mat("1 2 3;4 5 6;7 8 9")

#使用matrix函数创建矩阵
matr2=np.matrix([123],[456],[789])

#使用bmat函数合成矩阵
arr1=np.eye(3)
arr2=3*arr1
matr3=np.bmat("arr1 arr2;arr1 arr2")



#矩阵运算
matr2=matr1*3
matr3=matr1+matr2
matr4=matr1-matr2
matr5=matr1*matr2    #矩阵相乘
matr6=np.multiply(matr1,matr2)    #矩阵元素相乘

matr1.T    #转置
matr1.H    #共轭转置
matr1.I    #逆矩阵
matr1.A    #返回二维数组的视图

2.2 认识ufunc函数——能够对数组中所有元素进行操作

x=np.array([1,2,3])
y=np.array([4,5,6])

#四则运算
x+y
x-y
x*y
x/y
x**y

#比较运算
xy
x==y
x>=y
x<=y
x!=y

#逻辑运算
np.all(x==y)    #全部都相等
np.any(x==y)    #有一个就行

#注意ufunc的广播机制!!!

3. 利用NumPy进行统计分析

3.1 读写文件

#二进制格式

#save函数以二进制保存数据
np.save("d:/code/save_arr",arr)

#savez函数以二进制保存多个数组
np.savez("d:/code/save_arr",arr1,arr2)

#load函数以二进制读取数组
loaded_data=np.load("d:/code/save_arr.npz")
print(loaded_data['arr_0'])    #会自动给数组命名'arr_0''arr_1'

arr1=np.array([1,2,3],[4,5,6])
arr2=np.arange(0,1.0,0.1)
np.savez("d:/code/save_arr",src1=arr1,src2=arr2)    #给文件中的数组命名,就可以用新名字取出
print(loaded_data[src1])




#文本格式
#savetxt函数可以将数组写到某种分隔符隔开的文本文件中
np.savetxt("d:/code/arr.txt",arr,fmt="%d",delimiter=",")    #fmt="%d"表示保存为整数

#loadtxt函数可以把文件加载到一个二维数组中
loaded_data=np.loadedtxt("d:/code/arr.txt",delimiter=",")    #读写的delimiter要一致

#genfromtxt函数各异读取结构化数据和缺失数据的数组
loaded_data=np.genfromtxt("d:/code/arr.txt",delimiter=",")

3.2 使用数组进行简单统计分析

#(1)直接排序
#使用sort函数
arr.sort()
arr.sort(axis=1,kind='quicksort',order=None)    #横轴排序
arr.sort(axis=0,kind='quicksort',order=None)    #纵轴排序


#(2)间接排序
#argsort函数返回重新排序后数值的索引(是索引!返回的是索引!!)
arr.argsort(axis=0,kind='quicksort',order=None)

#lexsort函数返回按照最后一个传入数据确定的排序顺序(以(a,b,c)的c为标准排序)
arr.lexsort(axis=1,kind='quicksort',order=None)



#(3)去重与重复数据
#unique函数可以找出数组中的唯一值并返回排序后的结果
names=np.array(['小明','小黄','小花','小明','小花','小兰','小白'])
np.unique(names)

#tile函数可以重复数据(对数组重复)
arr=np.arange(5)
np.tile(arr,3)

#repeat函数可以重复数据(对元素重复)
arr.repeat(2,axis=0)    #按横轴重复元素
arr.repeat(2,axis=1)    #按纵轴重复元素

3.3 常用的统计函数

arr.sum()
arr.sum(axis=0)    #按列轴求和,下面同理

arr.mean()
arr.std()
arr.var()
arr.min()
arr.max()
arr.argmin()    #数组最小元素的索引
arr.argmax()
arr.cumsum()    #所有元素的累计和
arr.cumprod()

3.4 任务实现

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

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

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