Python的numpy库中的各种函数

tech2023-11-21  75

文章目录

从已有数据中创建数组array函数 将列表转为ndarray (随机)random模块生成数组random函数 生成0到1之间的随机数rand函数 生成0到1均匀分布的随机数uniform函数 生成均匀分布的随机数(小数)randn函数 生成标准正态的随机数(小数)randint函数 随机生成整数normal函数 生成正态分布random_sample函数 生成随机的浮点数shuffle函数 随机打乱顺序seed函数 设置随机数种子 创建指定形状的多维数组zeros函数 创建全为0的数组ones函数 创建全为1的数组empty函数 创建空数组,空数据不为0,而是未初始化zeros_like函数 创建与某数组相同形状且全为0的数组ones_like函数 创建与某数组相同形状且全为1的数组empty_like函数 创建与某数组相同形状且为空的空数组(未初始化)eye函数 创建左上到右下对角线为1,其他为0的数组full函数 将某值填充某数组diag函数 创建对角线为某值其他为0的数组linspace函数 创建某范围内的等差数列logspace函数 创建某范围内的等比数列arange函数 获取二维元素获取一维数据choice函数数据的保存与读取算术运算数组合并数组变形计算时间

从已有数据中创建数组

array函数 将列表转为ndarray
import numpy as np list1 = [[2, 5, 3.2], [0, 4.2, 5]] nd1 = np.array(list1) print(nd1) print(nd1.shape) #输出nd1的形状(2,3) print(type(nd1)) #nd1的类型 [[2. 5. 3.2] [0. 4.2 5. ]] (2, 3) <class 'numpy.ndarray'>

(随机)random模块生成数组

注:下列例子省略调库语句import numpy as np,运行时要加上

random函数 生成0到1之间的随机数
nd1 = np.random.random() #生成一个0到1之间的随机数 nd2 = np.random.random(2) #生成两个0到1之间的随机数 nd3 = np.random.random((2, 2)) #生成形状为(2, 2)的0到1之间的随机数
rand函数 生成0到1均匀分布的随机数
nd1 = np.random.rand() #生成一个服从0-1均匀分布的随机数 nd2 = np.random.rand(2) #生成两个服从0-1均匀分布的随机数 nd3 = np.random.rand(2, 3) #生成形状为(2,3)的服从0-1均匀分布的随机数 nd4 = np.random.rand(2, 3, 4)#生成形状为(2,3,4)的服从0-1均匀分布的随机数
uniform函数 生成均匀分布的随机数(小数)
nd1 = np.random.uniform(2, 5) #生成一个均匀分布在[2,5)区间的随机数 nd2 = np.random.uniform(10, 50, 3) #生成三个均匀分布在[10,50)区间的随机数 nd3 = np.random.uniform(0, 10, (2, 3)) #生成形状为(2,3)的均匀分布在[0,10)区间的随机数
randn函数 生成标准正态的随机数(小数)
nd1 = np.random.randn() #生成一个标准正态的随机数 nd2 = np.random.randn(3) #生成三个标准正态的随机数 nd3 = np.random.randn(2, 3) #生成形状为且(2,3)的标准正态的随机数
randint函数 随机生成整数
nd1 = np.random.randint(2, 5) #随机生成一个[2,5)区间的整数 nd2 = np.random.randint(0, 10, 5) #随机生成5个[0,10)区间的整数 nd3 = np.random.randint(10, 50, (2, 3)) #随机生成形状为(2,3)的数值在[10,50)区间的整数
normal函数 生成正态分布
nd1 = np.random.normal(10, 1) #随机生成1个正态分布为(10,1)的随机数 nd2 = np.random.normal(5, 10, 3) #随机生成3个正态分布为(5,10)的随机数 nd3 = np.random.normal(82, 20, (2, 3)) #随机生成形状为(2,3)的正态分布为(82,20)的随机数
random_sample函数 生成随机的浮点数
nd1 = np.random.random_sample() #随机生成1个浮点数 nd2 = np.random.random_sample(3) #随机生成3个浮点数 nd3 = np.random.random_sample((3, 3)) #随机生成形状为(3,3)的浮点数
shuffle函数 随机打乱顺序
nd = np.random.randint(0,10,(5,5))#随机生成形状为(5,5)的[0,10)区间的整数 print("打乱前:\n",nd) #\n为换行符,输出效果和下方打乱后一样 np.random.shuffle(nd) #将nd数组按行顺序打乱 print("打乱后:") print(nd) 打乱前 [[9 3 6 5 1] [4 2 5 7 8] [5 9 1 7 7] [1 1 5 9 3] [7 0 1 4 8]] 打乱后 [[1 1 5 9 3] [4 2 5 7 8] [9 3 6 5 1] [5 9 1 7 7] [7 0 1 4 8]]
seed函数 设置随机数种子
np.random.seed(100) #设置随机数种子,每次生成的数一样,100为参数,参数任意取,参数不同,所获得的随机数不同 nd = np.random.randint(0, 10, 5)#由于有种子的存在,每次生成5个[0,10)区间的整数相同 print("种子为100时随机数的结果为:",nd) 种子为100时随机数的结果为: [8 8 3 7 7]

创建指定形状的多维数组

zeros函数 创建全为0的数组
nd1 = np.zeros(2) #创建全为0的且含两个元素的一维数组 nd2 = np.zeros((2,3)) #创建全为0的且形状为(2,3)的二维数组 nd3 = np.zeros((2,3,4)) #创建全为0的且形状为(2,3,4)的三维数组
ones函数 创建全为1的数组
nd1 = np.ones(2) #创建全为1的且含两个元素的一维数组 nd2 = np.ones((2,3)) #创建全为1的且形状为(2,3)的二维数组 nd3 = np.ones((2,3,4)) #创建全为1的且形状为(2,3,4)的三维数组
empty函数 创建空数组,空数据不为0,而是未初始化
nd1 = np.empty(2) #创建全为空的且含两个元素的一维数组 nd2 = np.empty((2,3)) #创建全为空的且形状为(2,3)的二维数组 nd3 = np.empty((2,3,4)) #创建全为空的且形状为(2,3,4)的三维数组
zeros_like函数 创建与某数组相同形状且全为0的数组
nd1 = np.zeros((2,3)) #创建全为0的且形状为(2,3)的二维数组 nd2 = np.zeros_like(nd1) #创建与nd1维度形状相同且元素全为0的数组
ones_like函数 创建与某数组相同形状且全为1的数组
nd1 = np.zeros((2,3)) #创建全为0的且形状为(2,3)的二维数组 nd2 = np.ones_like(nd1) #创建与nd1维度形状相同且元素全为1的数组
empty_like函数 创建与某数组相同形状且为空的空数组(未初始化)
nd1 = np.zeros((2,3)) #创建全为0的且形状为(2,3)的二维数组 nd2 = np.empty_like(nd1) #创建与nd1维度形状相同且全为空的数组
eye函数 创建左上到右下对角线为1,其他为0的数组
nd1 = np.eye(5) #创建5*5的单位矩阵,左上角到有右下角的对角线全为1,其他为0 print(nd1) [[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.]]
full函数 将某值填充某数组
nd1 = np.full((3,5),666) #创建形状为(3,5)且元素全为666的数组 print(nd1) [[666 666 666 666 666] [666 666 666 666 666] [666 666 666 666 666]]
diag函数 创建对角线为某值其他为0的数组
nd1 = np.diag((1,2,3)) #创建左上到右下对角线为1,2,3其他为0的矩阵 print(nd1) [[1 0 0] [0 2 0] [0 0 3]]
linspace函数 创建某范围内的等差数列
nd1 = np.linspace(0,5,11) #创建从0到5元素为11个的等差数列 [0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. ]
logspace函数 创建某范围内的等比数列
nd1 = np.logspace(0,2,10) #创建从10º到10²元素为10个的等比数列 nd2 = np.logspace(1,3,10) #创建从10¹到10³元素为10个的等比数列 print("nd1为:\n",nd1) print("nd2为:\n",nd2) nd1为: [ 1. 1.66810054 2.7825594 4.64158883 7.74263683 12.91549665 21.5443469 35.93813664 59.94842503 100. ] nd2为: [ 10. 16.68100537 27.82559402 46.41588834 77.42636827 129.1549665 215.443469 359.38136638 599.48425032 1000. ]
arange函数
nd1 = np.arange(10) #从[0,10)的整数 nd2 = np.arange(5, 11) #从[5,11)的整数 nd3 = np.arange(3, 12, 2) #从[3,12)且间隔为2的整数 nd4 = np.arange(2, 13, 3) #从[2,13)且间隔为3的整数 print("nd1为:",nd1) print("nd2为:",nd2) print("nd3为:",nd3) print("nd4为:",nd4) nd1为: [0 1 2 3 4 5 6 7 8 9] nd2为: [ 5 6 7 8 9 10] nd3为: [ 3 5 7 9 11] nd4为: [ 2 5 8 11]

获取二维元素

nd = np.random.randint(0, 10, (5, 5)) #创建形状为(5,5)且元素在[0,10)之间的随机数 print(nd) print(nd[(nd>3)&(nd<8)]) #获取大于3小于8的数 print(nd[3][2]) #获取第四行第三个 print(nd[3, 2]) #获取第四行第三个,和上述效果一样 print(nd[1]) #获取第二行 print(nd[1:4]) #获取二至四行 print(nd[1:4:2]) #获取二至四行且间隔为2,即第二、第四行 print(nd[:, 1]) #获取第二列 print(nd[:, 1:4]) #获取二至四列 print(nd[:, 1:4:2]) #获取二至四列且间隔为2,即第二、第四列 print(nd[1:3, 2:4]) #获取二至三行且三至四列

获取一维数据

nd = np.random.randint(0, 10, 10) #创建10个在[0,10)之间的随机数 print(nd) print(nd[1]) #获取第二个数字 print(nd[2:8]) #获取第三至第八个数字 print(nd[:5]) #获取第一至第五个数字 print(nd[3:]) #获取第四至最后一个数字 print(nd[1:8:2])#获取第二至第八且间距为2的数字 print(nd[::2]) #获取所有数据且间距为二

choice函数

a = np.arange(1, 25) #获取排序为1到24数字 c1 = np.random.choice(a, size=(3, 4)) #从a中随机取出12个数字(形状为3*4),可重复获取 c2 = np.random.choice(a, size=(3, 4),replace=True) #从a中随机取出12个数字(形状为3*4),可重复获取 c3 = np.random.choice(a, size=(3, 4),replace=False) #从a中随机取出12个数字(形状为3*4),不可重复获取

数据的保存与读取

nd1 = np.random.random([5, 5]) np.savetxt(X=nd1, fname='./test1.txt') #保存数据,文件名为test1.txt nd2 = np.loadtxt('./test1.txt') #读取数据

算术运算

nd为一个数或一维或多维数组数组

nd**3 #3次方 np.max(nd) #返回nd数组中的最大值 np.maximum(nd, 5) #与5相比返回最大值,如果nd为数组则小于5的用5填充 np.sqrt(nd) #开方 np.sin(nd) #三角函数 np.cos(nd) #三角函数 np.abs(nd) #绝对值 np.exp(nd) #指数函数,打印e的nd次方,e是一个常数为2.71828 np.sum(nd) #求和 np.mean(nd) #计算平均值 np.median(nd #中位数 np.std(nd) #标准差 np.var(nd) #方差 np.log(nd) #底为e的对数,nd不能为0 np.log10(nd) #底为10的对数,nd不能为0 np.log2(nd) #底为2的对数,nd不能为0 np.multiply(nd, nd)#对应元素相乘,也可乘常数,如np.multiply(nd, 2)即nd1*2,nd1/2 np.add(nd, nd) #相加 np.subtract(nd, nd) #相减 np.divide(nd, nd) #相除 nd*nd #对应元素相乘,也可乘常数,即nd1*2,nd1/2 np.dot(nd, nd) #内积,矩阵相乘,nd为多维数组

数组合并

np.append(nd1,nd2) #将nd1和nd2合并为一维nd1在前,nd2在后 np.append(nd1,nd2,axis=0) #默认axis=0为nd2加在nd1下方,axis=1为nd2加在nd1右方 np.concatenate((nd1,nd2),axis=0) #默认axis=0为nd2加在nd1下方,axis=1为nd2加在nd1右方 np.stack((nd1,nd2),axis=2) #nd1,nd2都为二维(4,3),默认时axis=0合并后为三维(2,4,3)axis=1时为三维(4,2,3)axis=2时为三维(4,3,2) np.hstack((nd1, nd2)) #行合并 np.vstack((nd1, nd2)) #列合并 np.dstack((nd1, nd2)) #nd1,nd2都为二维(4,3),默认时axis=0合并后为三维(4,3,2) np.vsplit(nd1, 4) #横向拆分 np.hsplit(nd1, 3) #列向拆分

数组变形

print(nd) nd.reshape(2, 8) #将nd转化为2*8(nd转化前后元素个数相同),nd没发生变化 nd.reshape(-1, 2) #将nd转化为两列,2一定要能被nd元素个数整除 nd.reshape(2, -2) #将nd转化为两行,2一定要能被nd元素个数整除 nd.resize(2, 8) #将nd转化为2*8,且nd发生变化 nd.T #转置,3*4变为4*3,nd没发生变化 nd.ravel('F') #按列展开成一维 nd.ravel() #按行展开成一维 nd.flatten() #将多维转一维 nd.squeeze #降维,把矩阵中含1的维度去掉,如shape为(3,1)或(3,1,2,1),则降维后为(3,)或(3,2) nd.transpose(1, 0).shape #如果nd为3维且nd.shape为(2,3,4),则nd.transpose(1,2,0).shape为(3,4,2),进行维度切换

计算时间

import time toc = time.process_time() #程序 tic = time.process_time() t = str(1000*(toc - tic)) #单位ms
最新回复(0)