博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
numpy模块
阅读量:5130 次
发布时间:2019-06-13

本文共 5726 字,大约阅读时间需要 19 分钟。

numpy模块

计算速度快,提供了数组操作、数组运算、以及统计分布和简单的数学模型,用来存储和处理大型矩阵。

创建矩阵(掌握)

矩阵即numpy的ndarray对象,创建矩阵就是把一个列表传入np.arrray()方法。

#创建一维的ndarray对象import numpy as nplis = [1,2,3]np.array(lis)print(arr,type(arr))[1 2 3] 
#创建二维的ndarray对象print(np.array([[1,2,3],[4,5,6]]))[[1 2 3] [4 5 6]]
#创建三维的ndarrayprint(np.array([[[2.10025514,  0.12015895,  0.61720311],        [ 0.30017032, -0.35224985, -1.1425182 ],        [-0.34934272, -0.20889423,  0.58662319]],       [[ 0.83898341,  0.93110208,  0.28558733],        [ 0.88514116, -0.75439794,  1.25286816],        [ 0.51292982, -0.29809284,  0.48851815]],       [[-0.07557171,  1.13162939,  1.51981682],        [ 2.18557541, -1.39649634, -1.44411381],        [-0.50446586,  0.16003707,  0.87616892]]]))[[[ 2.10025514,  0.12015895,  0.61720311],    [ 0.30017032, -0.35224985, -1.1425182 ],    [-0.34934272, -0.20889423,  0.58662319]],   [[ 0.83898341,  0.93110208,  0.28558733],    [ 0.88514116, -0.75439794,  1.25286816],    [ 0.51292982, -0.29809284,  0.48851815]],   [[-0.07557171,  1.13162939,  1.51981682],    [ 2.18557541, -1.39649634, -1.44411381],    [-0.50446586,  0.16003707,  0.87616892]]]

获取矩阵的行列数

arr = np.array([[1,2,3],[4,5,6]])print(arr)[[1,2,3] [4,5,6]]
#获取矩阵的行和列构成的数组print(arr.shape)(2,3)
#获取矩阵的行print(arr.shape[0])2
#获取矩阵的列print(arr.shape[1])3

切割矩阵

切分矩阵类似于列表的切割,但是与列表不切割不同的是,矩阵的切割涉及到行和列的切割,但是两者的切割的方式都是从索引0开始,并且取头不取尾。

arr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])print(arr)[[1  2  3  4] [5  6  7  8] [9 10 11 12]]
#取出第二行,第三列的元素,默认第一行参数为0print(arr[1,2]) 7
#取第一行矩阵的元素print(arr[0,[0,1,2,3]])   [1 2 3 4]
#取出第一行矩阵的元素print(arr[0,:])[1 2 3 4]
#取出第一列矩阵的元素print(arr[:,0])   [1 5 9]
#矩阵按运算符取元素的原理,即通过arr > 5生成一个布尔矩阵print(arr > 5)[[False False False False] [False  True  True  True] [ True  True  True  True]]
#取大于5的元素,返回一个数组print(arr[arr > 5])[ 6  7  8  9 10 11 12]

矩阵元素替换

矩阵元素的替换,类似于列表元素的替换,并且矩阵也是一个可变类型的数据,即如果对矩阵进行替换操作,会修改原矩阵的元素,所以下面我们用.copy()方法举例矩阵元素的替换。

arr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])print(arr)[[ 1  2  3  4] [ 5  6  7  8] [ 9 10 11 12]]
#替换6为0arr[1,1] = 0print(arr)[[ 1  2  3  4] [ 5  0  7  8] [ 9 10 11 12]]
#取第一行的所有元素,并且让第一行的元素都为1arr[0,:] = 1print(arr)[[ 1  1  1  1] [ 5  6  7  8] [ 9 10 11 12]]
# 取出大于5的元素,并且让大于5的元素都为2arr[arr>5] = 2print(arr)[[1 2 3 4] [5 2 2 2] [2 2 2 2]]

矩阵的合并

arr1 = np.array([[1,2],[3,4],[5,6]])print(arr1)[[1 2] [3 4] [5 6]]
arr2 = np.array([[7,8],[9,10],[11,12]])print(arr2)[[ 7  8] [ 9 10] [11 12]]
  • vstack和hstack只能放一个参数,这个参数必须得是容器
#合并两个矩阵的列,注意使用vatack()方法合并矩阵,矩阵应该有相同的列,其中vstack的v表示vertical垂直的print(np.vstack((arr1,arr2)))  [[ 1  2] [ 3  4] [ 5  6] [ 7  8] [ 9 10] [11 12]]
#合并两个矩阵的行,注意使用hstack()方法合并矩阵,矩阵应该有相同的行,其中hastack的h表示horizontal水平的print(np.hstack((arr1,arr2)))[[ 1  2  7  8] [ 3  4  9 10] [ 5  6 11 12]]
#合并两个矩阵的列   默认垂直print(np.concatenate((arr1,arr2)))[[ 1  2] [ 3  4] [ 5  6] [ 7  8] [ 9 10] [11 12]]

在numpy中,为了统一做处理,只要有axis参数的,axis=0就是列,axis=1就是行

#合并两个矩阵,其中axis=0表示合并两个矩阵的列print(np.concatenate((arr1,arr2),axis=0))  [[ 1  2] [ 3  4] [ 5  6] [ 7  8] [ 9 10] [11 12]]
#合并两个矩阵,其中axis=0表示合并两个矩阵的行print(np.concatenate((arr1,arr2),axis=1))  [[ 1  2  7  8] [ 3  4  9 10] [ 5  6 11 12]]

通过函数创建多维数组

方法 详解
array() 将列表转换为数组,可选择显式指定dtype
arange() range的numpy版,支持浮点数
linspace() 类似arange(),第三个参数为数组长度
zeros() 根据指定形状和dtype创建全0数组
ones() 根据指定形状和dtype创建全1数组
eye() 创建单位矩阵
empty() 创建一个元素全随机的数组
reshape() 重塑形状
#创建一维数组print(np.arange(10))[0 1 2 3 4 5 6 7 8 9]
#取出1到10的数组,步长为2print(np.arange(1,10,2))[1 3 5 7 9]
#创建一个3*4值为1的矩阵print(np.ones((3,4)))[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]
#创建一个3*4*5 高为3,行为4,列为5的全0矩阵print(np.zeros((3,4,5)))[[[0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]] [[0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]] [[0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]  [0. 0. 0. 0. 0.]]]
#创建一个5*5的单位矩阵print(np.eye(5))[[1. 0. 0. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 1. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 0. 0. 1.]]

矩阵的运算

+  两个矩阵对应元素相加-  两个矩阵对应元素相减*  两个矩阵对应元素相乘/  两个矩阵对应的元素相除,如果都是整数则取商%  两个矩阵对应元素相除后取余数**n 单个矩阵每个元素都取n次方,如**2:每个元素都取平方
print(arr1+arr2)[[ 8 10] [12 14] [16 18]]
#点乘和转置print(np.dot(arr1,arr2.T))[[ 23  29  35] [ 53  67  81] [ 83 105 127]]
#求逆矩阵print(np.linalg.inv(np.dot(arr1,arr2.T)))[[-3.51843721e+13  7.03687442e+13 -3.51843721e+13] [ 7.03687442e+13 -1.40737488e+14  7.03687442e+13] [-3.51843721e+13  7.03687442e+13 -3.51843721e+13]]
#最大值print(arr1.max())6
#最小值print(arr1.min())1
arr1.argmax(axis=1)  # 获取矩阵最大元素的索引位置arr1.mean()  # 获取矩阵所有元素的平均值arr1.mean(axis=0)  # 获取矩阵每一列的平均值arr1.mean(axis=1)  # 获取矩阵每一行的平均值arr1.var()  # 获取矩阵所有元素的方差arr1.var(axis=0)  # 获取矩阵每一列的元素的方差arr1.var(axis=1)  # 获取矩阵每一行的元素的方差arr1.std()  # 获取矩阵所有元素的标准差arr1.std(axis=0)  # 获取矩阵每一列的元素的标准差arr1.std(axis=1)  # 获取矩阵每一行的元素的标准差np.median(arr1)  # 获取矩阵所有元素的中位数np.median(arr1,axis=0)  # 获取矩阵每一列的元素的中位数np.median(arr1,axis=1)  # 获取矩阵每一行的元素的中位数arr1.sum()  # 对矩阵的每一个元素求和arr1.sum(axis=0)  # 对矩阵的每一列求和arr1.sum(axis=1)  # 对矩阵的每一行求和arr1.cumsum()  # 累加和,如arr1=[1,2,3],arr1.cumsum=[1,3,6],第n个元素为前n-1个元素累加

numpy生成随机数

函数名称 函数功能 参数说明
rand(d0,d1,⋯,dnd0,d1,⋯,dn) 产生均匀分布的随机数 dndn为第n维数据的维度
randn(d0,d1,⋯,dnd0,d1,⋯,dn) 产生标准正态分布随机数 dndn为第n维数据的维度
randint(low[, high, size, dtype]) 产生随机整数 low:最小值;high:最大值;size:数据个数
random_sample([size]) 在[0,1)内产生随机数 size为随机数的shape,可以为元祖或者列表
choice(a[, size]) 从arr中随机选择指定数据 arr为1维数组;size为数组形状
uniform(low,high [,size]) 给定形状产生随机数组 low为最小值;high为最大值,size为数组形状
shuffle(a) 与random.shuffle相同 a为指定数组
np.random.seed(1)  #固定随机数,永不随机,固定print(np.random.rand(3,4))  #生成3*4的矩阵
#RandomState()方法会让数据值随机一次,之后都是相同的数据rs = np.random.RandomState(1)print(rs.rand(3,4))[[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01] [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01] [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]

转载于:https://www.cnblogs.com/zuihoudebieli/p/11215958.html

你可能感兴趣的文章
POJ 1548 Robots(最小路径覆盖)
查看>>
TXT小说朗读正式版
查看>>
JavaLearning:日期操作类
查看>>
vs2015转到定义没反应
查看>>
[转]IIS管理脚本adsutil.vbs的使用
查看>>
在.NET程序中实现HttpServer功能
查看>>
【Testin实验室】MoiMark安卓中国终端体验性能排行榜(11月报)
查看>>
C#改动文件或目录的权限,为指定用户、用户组加入全然控制权限
查看>>
HDU 5055 Bob and math problem(结构体)
查看>>
承诺c指针 (1)指针是地址
查看>>
PHP:Cannot modify header information - headers already sent by错误的解决方案
查看>>
Ejb in action(七)——message与JMS
查看>>
HDU1342 Lotto 【深搜】
查看>>
php语法分析
查看>>
windows8 卸载cdkey
查看>>
iosMD5加密和base64加密
查看>>
OSG+VS2010+win7环境搭建 (转)
查看>>
OpenGL ES 3.0之Fragment buffer objects(FBO)详解 (转)
查看>>
js冒泡排序和二分查找
查看>>
通俗的理解冒泡和闭包
查看>>