首页 > 编程语言 >Python中Numpy函数详解

Python中Numpy函数详解

时间:2024-03-25 12:22:38浏览次数:19  
标签:Python x2 shape 详解 数组 np x1 Numpy axis

NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。

Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。

学Python的同学应该都知道Numpy库,也知道这个库在机器学习领域是必不可少的库,这里我为大家整理了Numpy库的一些常用的函数,方便大家在使用的时候查找。

Numpy库函数讲解
Numpy数据类型
类型 含义
np.int8 和 np.uint8 整数(-128到127)和 无符号整数(0到255)
np.int16 和 np.uint16 整数(-32768至32767)和 无符号整数(0到65535)
np.int32 和 np.uint32 整数(-2147483648至2147483647)和 无符号整数(0到4294967295)
np.int64 和 np.uint64 整数(-9223372036854775808至9223372036854775807)和 无符号整数(0到18446744073709551615)
np.float16 半精度浮点数(十进制下小数点后精确到后四位)
np.float32 单精度浮点数(十进制下小数点后精确到后8位)
np.float64 双精度浮点数
np.complex64 复数,由两个32位浮点数(实数和虚数组成)表示
np.complex128 复数,由两个64位浮点数(实数和虚数组成)表示
np.bool_ 布尔值,由True和False组成
Numpy的创建
函数 含义
np.array(object, dtype=None,copy=True) odject = []或(),创建一维组。object = [[],[],…] 或((),()…),创建二维数组。dtype可自选数据类型,不写系统会自动判断填写数据类型。copy默认为True
np.asarray(object,dtype=None) 当np.array(copy = False)两函数一样
讲解一下np.array中参数copy的用法,文字描述十分麻烦,还是代码演示吧

import numpy as np
a = [-1,2,2]
a = np.array(a)
c = np.array(a,copy = False)
a[0] = 100
print('当copy=False')
print('c数组')
print(c)
print('a数组')
print(a)
#代码运行结果:
当copy=False
c数组
[100 2 2]
a数组
[100 2 2]
当copy=True
c数组
[-1 2 2]
a数组
[100 2 2]


通过代码结果可以看出copy为True和False的区别,也就明白了np.array与np.asarray的区别

函数 含义
创建等差数列 np.arange([start,]stop, [step],[dtype]) 创建一个从start到stop-1,步长为step的数组,其中start默认为0,step默认为1,stop是必须填写的参数
创建等差数列 np.linspace(start,stop,[num],[endpoint],[dtype ]) 创建一个从start到stop的等差数列,num为此等差数列的个数,默认50,endpoint默认为True代表数列的最后一项包含stop,反之不包含
特殊值数组np.zeros(shape, [dtype],) shape为一个数值,创建一个一维的值为0的数组,shape为元组或列表,创建一个与shape尺寸大小的值为0的数组。
特殊值数组np.ones(shape,[dtype]) shape为一个数值,创建一个一维的值为1的数组,shape为元组或列表,创建一个与shape尺寸大小的值为1的数组
特殊值数组np.eye(n,[m],[k],[dtype]) n为数组的行数。m是输出的列数,默认为n。k默认为0表示的是主对角线为1,其余为0,负数越小表示为1的对角线往主对角线的下方走,正数越大表示为1的对角线往主对角线的上方走。
numpy创建随机数组
函数 含义
np.random.seed(k) 如果使用相同的k 值,则每次生成的随机数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。
np.random.random([size]) 在[0,1)区间随机生成数组,szie不填写时只生成一个数据的数组,size可接收列表或元组,随机生成和size尺寸大小相同的数组
np.random.rand(x,x1,x2…) 在[0,1)区间随机生成符合(x,x1,x2…)尺寸大小形状的数组
np.random.randn(x,x1,x2…) 生成符合标准正态分布的(x,x1,x2…)尺寸大小形状的数组
np.random.randint(low, [high], [size], [dtype]) 在[low,high)区间内生成符合size尺寸大小相同的数组,当参数high不填写时生成区间为[0,low)的数组。当shape不填写时只生成一个数据的数组
np.random.choice(a,[size],[replace=True],[p]) a为数字,则从[0,a)中随机抽取数字,a为列表,元组和数组(必须是一维的)中随机抽取数字。size不填写时,只随机产生一个数据,siz为数字,随机产生size个数据组成一维数组,size为列表或元组,则生成与size相同大小尺寸的数组。replace默认为True,表示可以取相同数字,False表示不可以取相同数字。p与a相对应,表示取数组a中每个元素的概率,默认为选取每个元素的概率相同。
numpy.random.normal(loc=0.0, scale=1.0, size=None) loc:浮点型数据,分布的均值(中心)。scale: 浮点型数据,分布的标准差(宽度)。size:整数或者整数组成的元组,如果给定size,生成与size尺寸大小相同的数组。如果size为None(默认值),那么就会返回一个值。
Numpy数组的属性函数
函数 含义
ndim 返回int。表示数组的维度
shape 返回tuple。表示数组的尺寸,对于n行m列的矩阵,形状为(n,m)
size 返回int。表示数组的元素总数,等于数组形状的乘积
dtype 返回type。描述数组中元素的类型
itemsize 返回int。表示数组的每个元素的大小(以字节为单位)
nbytes 返回int。表示数组占用的空间
Numpy更改数组形状
函数 含义
np.reshape(a, newshape,) 或a.reshape(shape) 两函数效果相同,np.reshape的参数newshape只能接收列表和元组,但a.reshape不但可以接收列表和元组,参数的每个元素作为单独的参数传入.变换后的数组的元素个数与原来的元素个数相同,否则报错
np.resize(a,new_shape)或a.reszie() new_shape只能接收列表和元组,a.resize可单个接收,也可接收列表和元组。变换后的数组的元素个数可以与原数组的元素个数不同,np.shape可以进行重复填充,a.resize进行0填充。
np.ravel(a)或a.ravel() 将数组a变为一维数组
a.flatten() 将数组a变为一维数组
np.squeeze(a) 移除元素个数为一的维度
np.transpose(a,axes)或a.transpose() a 为输入的数组。axes为元组 或 列表, 如果指定,它必须是包含[0,1,…,N-1]的排列的元组或列表,其中N是a的轴数,返回数组的第i个轴将与输入的编号为axes [i]的轴相对应。 axes默认为range(a.ndim)[::-1],这将反转轴的顺序。a.transpose功能与np.transpose一样,a.transpose可以接收多个数,元组或列表(这个难以理解,建议使用a.shape来查看使用该函数前后的变化)
np.swapaxes(a, axis1, axis2)或a.swapaxes() 交换axis1和axis2的所代表的两个轴,axis1和axis2都为整数。a.swapaxes也只能接收两个整数。切记这两个函数不能输入两个整数的列表或元组
Numpy统计函数
函数 含义
np.sum(a, axis=None)或a.sum(axis = None) 根据给定轴axis计算数组a相关元素之和,axis整数或元组
np.mean(a, axis=None)或a.mean(axis = None) 根据给定轴axis计算数组a相关元素的期望,axis整数或元组
np.average(a,axis=None,weights=None) 根据给定轴axis计算数组a相关元素的加权平均值
np.std(a, axis=None)或a.std(axis = None) 根据给定轴axis计算数组a相关元素的标准差
np.var(a, axis=None)或a.var(axis = None) 根据给定轴axis计算数组a相关元素的方差
np.min(a,axis=None)或a.min(axis=None) 计算数组a中元素的最大值
np.max(a,axis=None)或a.max(axis=None) 计算数组a中元素的最大值
np.argmin(a,axis=None)或 a.argmin(axis = None) 计算数组a中元素最小值降为一维后的下标
np.argmax(a,axis=None)或 a.argmax(axis = None) 计算数组a中元素最大值降为一维后的下标
np.ptp(a,axis=None)或a.ptp(axis = None) 计算数组a中元素最大值与最小值的差
np.median(a,axis=None)或 a.median(axis = None) 计算数组a中元素的中位数(中值)
Numpy算数操作
函数 含义
x1+x2或np.add(x1,x2) x1与x2相加,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
x1-x2或np.subtract(x1,x2) x1减x2,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
-x或np.negative(x) 取x的负数,x可以为数值也可以为数组
x1*x2或 np.multiply(x1,x2) x1x与2相乘,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
x1/x2或np.divide(x1,x2) x1除以x2,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同,x2为零的时候,值为inf(无限大)
x1//x2或 np.floor_divide(x1,x2) x1整除x2,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
x1**x2或 np.power(x1,x2) x1的x2次方,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
x1%x1或 np.mod(x1,x2) x1除以x2的余数,x1与x2可以为数值也可以都为数组,数组的时候其shape的尺寸大小要相同
Numpy比较操作
函数 含义
x1==x2或np.equal(x1,x2) 返回布尔数组
x1!=x2或no.not_equal(x1,x2) 返回布尔数组
x1<x2或np.less(x1,x2) 返回布尔数组
x1<=x2或np.less_equal(x1,x2) 返回布尔数组
x1>x2或np.greater(x1,x2) 返回布尔数组
x1>=x2或 np.greater_equal(x1,x2) 返回布尔数组
Numpy的指数,对数,三角函数
三角函数输入和输出的是弧度制

函数 含义
np.deg2rad 将角度制化为弧度制
np.rad2deg 将弧度制化为角度制
在使用三角函数的时候我们可以先将角度制化为弧度制,再带入三角函数。

函数 含义
np.exp 计算指数(e^x)
np.log,np.log10,np.log2,np.log1p 求以e为底,以10为低,以2为低,以(1+x)为底的对数
np.sign 将数组中的值标签化,大于0的变成1,等于0的变成0,小于0的变成-1
np.cos,np.sin,np.tan 三角函数
np.arccos,np.arcsin,np.arctan 反三角函数
Numpy取整,四舍五入
函数 含义
np.ceil 朝着无穷大的方向取整,比如5.1会变成6,-6.3会变成-6
np.floor 朝着负无穷大方向取证,比如5.1会变成5,-6.3会变成-7
np.rint(a) 四舍五入取整
np.round(a,decimals=0) 返回四舍五入后的值,decimals为小数点后的位数
np.modf 将整数和小数分隔开来形成两个数组
array.astype(‘数据类型’) 转换数组array的数据类型
Numpy矩阵运算
函数 含义
np.dot(a,b) a与b进行数组的行列式相乘
np.linalg.inv(a) 求矩阵a的逆
np.linalg.det(a) 求a的行列式
np.linalg.eig(a) 求a的特征值和特征向量
np.linalg.sval(a) 求a的奇异值分解
np.linalg.norm(a, ord=2, axis=None,) ord=1:求一范数,ord=2:求二范数,ord=np.inf:无穷范数,
Numpy数组合并
函数 含义
np.append(arr, values, axis=None) arr:需要被合并values的数组。values:合并到数组arr中的数组。axis:可选参数,如果axis没有给出,合并后返回值为一维数组。axis被填写,按照axis指定的维度合并(axis填写时arr和values需有相同的shape的尺寸大小)
np.concatenate(arrays, axis=None) array多个数组组成的列表或元组。axis填写后将按照axis指定的维度合并(array中的数组可以是不同的shape的尺寸大小)
np.stack(arrays, axis=0) array多个数组组成的列表或元组。axis填写后将按照axis指定的维度合并(array中的数组需为相同的shape的尺寸大小)
np.hstack(tup) 横向合并,tup多个数组组成的列表或元组。建议使用二维数组,多维数组当shape的尺寸大小不同时有时可以合并,有时不可以。
np.vstack(tup) 竖向合并,tup多个数组组成的列表或元组。
Numpy数组分割
函数 含义
np.split(ary, indices_or_sections, axis=0) ary:要切分的数组。indices_or_sections:如果是一个整数,表示将arry切割为改整数份,如果是一个列表或元组(第一个值不要为0),列表值进行切分。axis:沿着哪个维度进行切向,默认为0,横向切分,1表示竖向切分。
np.hsplit(ary, indices_or_sections) 竖向切分。ary:要切分的数组。indices_or_sections:如果是一个整数,表示将arry切割为改整数份,如果是一个列表或元组(第一个值不要为0),列表值进行切分。
np.vsplit(ary, indices_or_sections) 横向切分。ary:要切分的数组。indices_or_sections:如果是一个整数,表示将arry切割为改整数份,如果是一个列表或元组(第一个值不要为0),列表值进行切分。
Numpy其他函数
函数 含义
np.take(a,indices,axis = None)/a.take() a:要提取的数组。indices;要提取的值的索引的列表。axis=0:抽取相应索引行的数据。axis=1:抽取相应索引列的数据。axis=None:将数组转化为一维数据再进行索引相对应的数据
np.argmax(array, axis=None) /array.argmax(axis=None) array:代表输入数组;axis=0:对array取每一列的最大值的索引,axis=1:对array取每一行的最大值的索引。axis=None:j将array转为一维数据再进行取最大值的索引(axis为1和0所对应的列和行没有写错,它是和别人不同)
np.tensordot讲解
np.tensordot函数是对于高维矩阵进行的内积运算,这个内积的过程不好理解,建议从维度上进行理解就好了

np.tensordot(a,b,axes)
1
a,b是要进行内积运算的矩阵
axes是矩阵要运算的维度

1.当axes = n时,n为整数时,代表的是a的后n个维度与b的前n个维度进行内积后,a去掉后n个维度,b去掉前n个维度两者再结和的维度,看例子:

首先定义两个矩阵

>>> a = np.random.rand(4,5,3,2)
>>> b = np.random.rand(2,3,5,4)

这里设定axes = 0时代表没有维度去掉,故新矩阵维度为(4, 5, 3, 2, 2, 3, 5, 4)
axes = 1的时候运算后的矩阵的大小为去掉了a的后一个维度与b 的前一个维度故新矩阵维度为(4, 5, 3, 3, 5, 4)

>>> print(np.tensordot(a,b,axes = 0).shape)
(4, 5, 3, 2, 2, 3, 5, 4)
>>> print(np.tensordot(a,b,axes = 1).shape)
(4, 5, 3, 3, 5, 4)

这里是axes = 2的时候,但是a的后2个维度与b的前2各维度不相同,就会报错

>>> print(np.tensordot(a,b,axes = 2).shape)
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
print(np.tensordot(a,b,axes = 2).shape)
File "<__array_function__ internals>", line 200, in tensordot
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\core\numeric.py", line 1117, in tensordot
raise ValueError("shape-mismatch for sum")
ValueError: shape-mismatch for sum

修改b的维度使得b的前2个维度与a的后2个维度相同,新矩阵的大小为(4, 5, 5, 4)

>>> b = np.random.rand(3,2,5,4)
>>> print(np.tensordot(a,b,axes = 2).shape)
(4, 5, 5, 4)

2.当axes = [m,n],代表a的m维度与b的n维度进行的内积,新的矩阵大小为去掉a的m维b的n维然后再组合
首先我们看一下a,b的各维度的大小

>>> print(a.shape,b.shape)
(4, 5, 3, 2) (3, 2, 5, 4)

接着尝试内积a的2维b的0维,去掉后可以看见新矩阵的大小为(4, 5, 2, 2, 5, 4)

>>> print(np.tensordot(a,b,axes = [2,0]).shape)
(4, 5, 2, 2, 5, 4)

但是如果想要内积的维度大小不同,会报错

>>> print(np.tensordot(a,b,axes = [1,1]).shape)
Traceback (most recent call last):
File "<pyshell#61>", line 1, in <module>
print(np.tensordot(a,b,axes = [1,1]).shape)
File "<__array_function__ internals>", line 200, in tensordot
File "C:\Users\Administrator\AppData\Local\Programs\Python\Python38\lib\site-packages\numpy\core\numeric.py", line 1117, in tensordot
raise ValueError("shape-mismatch for sum")
ValueError: shape-mismatch for sum

3.如果axes接收的是一个嵌套列表的列表:[[m], [n]],等于说可以选多个维度内积 (注意这里的两个列表相对应的维度的大小要相同),然后去掉a,b相应的维度,再组合
首先查看a,b的各维度大小,接着我们这里想要在大小为5和2的维度上内积,这里一定要注意两个列表中维度大小要相同

>>> print(a.shape,b.shape)
(4, 5, 3, 2) (3, 2, 5, 4)
>>> print(np.tensordot(a,b,axes = [[1,3],[2,1]]).shape)
(4, 3, 3, 4)

参考:https://blog.csdn.net/m0_59151709/article/details/129355556

https://blog.csdn.net/jiebaoshayebuhui/article/details/126740304

 

标签:Python,x2,shape,详解,数组,np,x1,Numpy,axis
From: https://www.cnblogs.com/klb561/p/18094107

相关文章

  • python3.6 使用调用栈储存上下文变量
    python3.6使用调用栈储存上下文变量从python3.7开始,新增contextvars模块,用于储存上下文变量.使用场景#python3.7fromcontextvarsimportContextVarimportasynciouser=ContextVar('var')asyncdefb():u=user.get()print(f'getname{u}')......
  • python 递归树状结构 和 排序
    排序defrecursive_sort(self,categories):categories.sort(key=lambdax:x['sort'])forcategoryincategories:ifcategory['children']:category['children']=self.recursive_sort(ca......
  • Python 答疑辅导
    写在前面的话亲爱的小伙伴们,我是负责Python答疑的老师,很高兴您们踏进编程的大门,并选择Python作为一个“敲门砖”。Python语言由于它的易学性和易理解性,深受小伙伴们的喜欢。在当下人工智能与机器学习发展势头如火如荼,Python语言在这个领域可谓是编程语言中的佼佼者。......
  • 「Linux系列」Shell 函数详解
    文章目录一、Shell函数定义二、Shell函数参数三、Shell函数用途四、Shell函数优缺点五、相关链接一、Shell函数定义Shell函数是由若干条Shell命令组成的语句块,它实现了代码重用和模块化编程,使得脚本编写更加简洁、高效和可维护。Shell函数定义的基本格式如下:......
  • Python数据匹配和记录链接库之recordlinkage使用详解
    概要Python的recordlinkage库为数据匹配和记录链接提供了一个强大的工具集,使得从不同数据源识别重复或相关记录变得简单高效。这对于数据清洗、合并数据集、实体识别等任务至关重要。recordlinkage库简介recordlinkage提供了一套全面的工具来进行复杂的记录比较、匹配和......
  • Python JIT 编译器库之Pyjion使用详解
      概要Pyjion是一个针对Python解释器的JIT编译器,旨在提高Python代码的性能。本文将深入探讨Pyjion库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。Pyjion简介Pyjion是一个用于Python解释器的JIT(即时编译)编译器,它的目标是通过实时编译Py......
  • 从静态到动态化,Python数据可视化中的Matplotlib和Seaborn
    本文分享自华为云社区《Python数据可视化大揭秘:Matplotlib和Seaborn高效应用指南》,作者:柠檬味拥抱。安装Matplotlib和Seaborn首先,确保你已经安装了Matplotlib和Seaborn库。如果没有安装,可以使用以下命令进行安装:pipinstallmatplotlibseabornMatplotlib基础Matplotlib是......
  • python抓取百度翻译
    第一步点击立即翻译查看请求的翻译接口第二步复制接口域名后的请求链接部分第三步点击开发者工具栏上的source选项卡,找到右边栏的XHR/fetchBreakpoints,点击后面的+号粘贴字符串第四步点击立即翻译找到调用接口的代码第五步如果找到不是真正的调接口的代码,需要上他的......
  • IPython刷新函数模块
    技术背景IPython是一个非常灵活好用的python终端工具,而且比Python自带的终端工具还多了命令行高亮和自动索引的功能,也是常用的JupyterNotebook的基础工具。在使用IPython的过程中可以使用它的一些独有的功能——直接运行Shell命令行,和魔术命令。本文介绍的是其中一种魔术命令—......
  • 第一个Python程序(上)
    1第一个HelloPython程序1.1Python源程序的基本概念Python源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做Python的开发Python程序的文件扩展名通常都是.py1.2演练步骤新建study_Python目录在study_Python目录下新建hello_python.p......