python 矢量运算,numpy向量化
Numpy基金会:数组和向量运算目录:
第一篇Numpy及其重要性2 ndarray:一个多维数组对象1创建ndarray2 ndarray的数据类型3数组和标量之间的操作4基本索引和切片元素索引切片索引布尔索引花式索引数组转置和轴交换三个通用函数:快速元素级数组函数4用数组进行数据处理1条带。逻辑表示为数组计算2。数学和统计方法。布尔数组4的方法。排序5。唯一性和其他集合逻辑5。数组6的文件输入和输出。线性代数7。随机数生成。
Numpy及其重要性Numpy(数值Python)是高性能科学计算和数据分析的基础包,是几乎所有数据分析高级工具的基础。
ndarray,一种快速且节省空间的多维数组,具有矢量运算和复杂广播功能。
整套数据快速运算的标准数学函数(无需写循环)。
读写磁盘数据的工具和操作内存映射文件的工具。
线性代数、随机数生成、傅立叶变换的功能。
CAPI,集成C、C、Fortran等语言编写的代码的工具,将数据转移到外部库(从生态系统的角度)。
Numpy本身并没有提供太多高级的数据分析功能。理解Numpy数组和面向数组的计算将帮助您更有效地使用pandas和其他工具。掌握面向数组的编程和思维模式是成为Python科学计算冠军的关键一步。对于大多数数据分析应用,最受关注的功能主要集中在:
用于数据排序、自构造、过滤、转换等快速矢量化数组操作。
常用的数组算法,如排序、唯一性、集合运算等。
高效的描述统计和数据聚合/汇总操作。
异构数据集合并/连接操作的数据对齐和关系数据操作。
将条件逻辑表示为数组表达式(而不是带有if-elif-else分支的循环)。
数据的分组操作(聚合、转换、函数应用等。).Ndarray:多维数组对象Numpy最重要的特性之一是它的N维数组对象:ndarray,这是一个快速灵活的大型数据集容器。可以用这个数组对整个数据块进行一些数学运算,其语法和标量元素之间的语法是一样的。Ndarray是同构数据的通用多维容器,其中所有元素必须是同一类型。每个数组都有一个形状(表示每个维度大小的元组)和一个dtype(用于描述数据类型的对象)。Data.shape () (2,3) data.dtype () (float64) 1创建一个ndarray类型的对象Data=[1,2,3,4] arr=np.array (data)嵌套序列,它将被转换为多维数组。Np.array将尝试为新创建的数组推断更合适的数据类型,数据类型将存储在一个特殊的dtype对象中。创建数组的其他函数。Np.zeros() #所有指定长度或形状的数组都是0np.ones() #所有指定长度或形状的数组都是1np.empty() #空数组Np .arange()# Python内置函数的数组版本2 ndarray的数据类型dtype(数据类型)是一个特殊的对象,它包含了ndarray将一块内存解释为特定数据类型所需的信息:arr=np.array ([1,2,3),dtype=NP . float 64)arr . dtype()dtype是Numpy如此强大灵活的原因之一。Numpy的数据类型:int8/Uint8——有符号和无符号float64——浮点complex64——复杂bool——布尔对象——python对象类型string_—— string类型unicode——unicode类型可以通过ndarray的astype方法显式转换其dtype。float _ arr=arr . astype(NP . float 64)调用astype无论如何都会创建一个新数组(原始数据的副本),即使新的dtype与前一个相同。3个数组和标量之间的算术数组很重要,因为它使您能够对数据执行批处理操作,而无需编写循环。这通常被称为矢量化。任何大小相等的算术运算都会将运算应用到元素级别。数组和标量算术运算也会将标量值传播到每个元素。不同大小的数组之间的操作称为广播(广播机制)。4基本索引和切片Numpy数组的索引是一个丰富的主题,因为有许多方法可以选择数据子集或单个元素。将标量值分配给切片时,该值会自动传播到整个选择。与列表最重要的区别是,数组切片是原始数组的视图,这意味着数据不会被复制,视图上的任何变化都会直接反映到源数据上。如果需要一个副本而不是这个视图,就需要一个显式的复制操作:arr.copy()。Numpy旨在处理大数据。如果Numpy来回复制数据,会造成很多性能和内存问题。元素索引可以为高维数组做更多的事情。在二维数组中,每个索引位置的元素不再是标量,而是一维数组。可以递归访问高维数组的每个元素,也可以传入逗号分隔的索引列表来选择单个元素。ARR2D=NP。Array ([1,2,3],[4,5,6],[7,8,9]) ARR2D [0],[2]=ARR2D [0,2]=3 切片索引nadrray的切片语法类似于python list这样的一维对象。对于高纬度对象,有许多切片模式。可以在一个轴或多个轴上切片,也可以混合整数索引。
Arr2d[:2,1:] #只能得到相同维的数组视图Arr2d[1,2] #通过混合整数索引和切片,可以得到低维的切片arr2d[:1] #只有冒号表示选择了整个轴布尔索引确定条件数据[names=bob ,2:] #布尔数组的长度必须与索引轴的长度相同。此外,还可以混合切片、整数等。 Fancy index Fancy index是一个Numpy术语,指的是使用整数数组进行索引arr=np.empty ((8,4)) arr [[4,3,0,6]] #只需将指定顺序的整数列表或ndarray传入arr[[-3,-5,-7]] #使用负索引会选择arr=np的行。阿兰格(32岁)。reshape ((8,4)) arr [[1,5,7,2],[0,3,1,2]] #一次传入多个索引数组会有一些特殊的数组换位和轴换位。这种操作常用于矩阵计算。通用函数:快速元素级数组函数通用函数(ufunc)是一个对nadrray中的数据执行元素级操作的函数。可以将其视为简单函数的矢量化包装器(接受一个或多个标量值并生成一个或多个标量值)。许多ufunc是简单的元素级变体。如np.sqrt() /np.exp()一元ufunc(接受数组):abs/fabs #绝对值,非负绝对值。Sqrt #计算每个元素的平方根。Square #计算每个元素的平方。Exp #计算每个元素的索引。Log/log10/log2/log1p #计算每个元素的自然对数。Sign #计算每个元素的符号。Ceil #计算每个元素的上限值,即大于或等于该值的最小整数。Floor #计算每个元素的底值,即小于或等于该值的最大整数。Rint #将每个元素舍入到最接近的整数。Modf #将数组的小数部分和整数部分作为两个独立的数组返回。Is #返回一个表示“哪些值是NaN”的布尔数组。Isfinite/isinf #返回一个表示无穷大的布尔数组。Cos/cosh/sin/sinh/tan/tanh #三角函数二元ufunc(接受两个数组):add #将数组中对应的元素相加subtract #从第一个数组中减去第二个数组中的元素。乘法#数组元素相乘。Divide/floor_divide #除法或向下圆除法,舍弃余数。Power # Calculate第二个数组中的元素B相对于第一个数组中的元素A的计算:A的B次方。Maximum/fmax #在元素级别计算最大值,忽略NaN。minimum/fmin #元素级最小值计算忽略NaN。Copysign #将第二个数组的值的符号复制到第一个数组中的相应值。greater/greater _ equal/less/less _ equal/equal/not _ equal #在元素级别执行比较操作,最终生成布尔数组。logical _ AND/logical _ OR/logical _ XOR #执行元素级真值逻辑运算(AND或NOT)。使用四个数组进行数据处理Numpy数组可以将多种数据处理任务表达为简洁的数组表达式(否则需要写循环)。用数组表达式替换循环的做法通常被称为向量化。一般来说,矢量化数组运算比等价的纯python方法快1~2个数量级(甚至更多)。Broadcast ——是矢量化计算的有力工具。1条件逻辑的表达式作为数据分析中的数组计算,这里通常用来根据一个数组生成一个新的数组。np.where函数是三元表达式x if condition else y的矢量化版本。np.where的第二个和第三个参数不必是数组。传递给where的数组大小可以不相等,甚至可以是标量值。多层嵌套使用,更强大。数学统计方法可以通过数组上的一组数学函数,对整个数组或部分轴向数据进行统计计算和聚合运算(聚合通常称为归约)。基本数组统计方法:sum #对数组中的所有或轴向元素求和。
Mean #算术平均值std/var #分别是标准差和方差,并且自由度可以调整min/max #最大值和最小值argmin/argmax #最大值和最小值元素的索引cumsum #累积和cumprod #累积积和平均值等。函数可以接受一个轴参数,用于计算轴统计值,并得到一个小于一维的数组。诸如cumsum和cumprod之类的方法不进行聚合,并产生一系列中间结果。3方法4排序对于python这样的布尔数组,Numpy数组也可以通过sort方法就地排序。多维数组可以在任何轴上排序,只要给定轴号并传递给sort。arr.sort()的顶级方法返回数组的有序副本,而就地排序会修改数组本身。计算数组分位数最简单的方法是对齐和排序,然后选择特定位置的值。5唯一性等集合逻辑Numpy为一维ndarray提供了一些基本的集合运算。array: unique(x) #的集合运算计算x中的唯一元素,并返回一个有序结果。相当于纯python代码中的set()。inter sc1d(x,y) #计算x和y中的公共元素,并返回排序结果。Union1d(x,y) #计算x和y的并集并返回排序结果。In1d(x,y) #获取一个布尔数组,该数组指示x是否包含在y中。setdiff1d(x,y) # set的差,即元素在x中而不在y中setxor1d(x,y) #的对称差,即元素存在于一个数组中但不同时存在于两个数组中。五个数组的文件I/O Numpy可以读写磁盘上的文本数据或二进制数据。np.save和np.load是读写磁盘阵列数据的两个主要函数。Arr=NP。Loadtxt (array _ ex。txt ,分隔符=,)Arr=NP。Savext()六线性代数。
线性代数(如矩阵乘法、矩阵分解、行列式等方阵数学)是任何数据库的重要组成部分。
Numpy.ligalg中有一组标准的矩阵分解操作,还有求逆行列式之类的东西:
Diag #将方阵的对角线(或非对角线)元素作为一维数组返回,或将一维数组转换为方阵(非对角线元素为0)。点#矩阵乘法。Trace #计算对角线元素的和。计算矩阵的行列式。Eig #计算方阵的特征值和特征向量。Inv #计算方阵的逆矩阵。pinv #计算矩阵的MP伪逆。Qr #计算Qr分解。Svd #计算奇异值分解。Solve #求解线性方程组ax=b,其中A是一个方阵。Lstsq #计算ax=b的最大dbdst乘法解.seven random numpy . random模块补充了python的内置random,增加了一些样本值函数,用于高效地生成多个概率分布。但是python内置的random模块一次只能生成一个样本值,当需要生成大量样本值时,Numpy.random要快一个数量级以上。Numpy.random函数的一部分:seed #确定随机数生成器的种子。Permutation #返回序列的随机排列或随机排列的范围。Shuffle #当场随机排列一个序列。Rand #产生均匀分布的样本值。Randint #从给定的上限和下限中随机选择整数。Randn #生成正态分布的样本值(平均值为0,标准差为1)。Binary #产生二项分布的样本值。Normal #生成正态(伸展的翅膀)分布的样本值。Beta #生成Beta分布的样本值。Chisquare #生成卡方分布的样本值。Gamma #生成Gamma分布的样本值。Uniform #生成均匀分布在[0,1]中的样本值。随机漫步模拟随机漫步来说明如何使用数组操作。第一次穿越时间。一次模拟多个随机行走。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。