python 矢量化,python向量化计算
首先,本文继续numpy学习。
两向量运算numpy的数组通常是批量运算,不写循环。
一维数组
二维数组
其他运算:加减乘除。以乘法为例。
numpy广播(Broadcast)广播是NumPy对不同形状的数组进行数值计算的一种方式。数组上的算术运算通常在相应的元素上执行。
如果两个数组A和B的形状相同,即满足a.shape == b.shape,那么a*b的结果就是数组A和B的对应位相乘,这就要求维数相同,每个维数的长度相同。
当操作中两个数组的形状不同时,numpy会自动触发广播机制。
三个NumPy切片和索引ndarray对象的内容可以通过索引或切片来访问和修改,就像Python中list的切片操作一样。
Ndarray数组可以基于0-n的下标进行索引,slice对象可以通过内置的Slice函数进行切片,可以设置start、stop和step参数,从原数组中切出一个新的数组。
多维数组也适用于上述索引提取方法:
numpy数组比较运算
整数数组索引以下示例获取数组中位置(0,0)、(1,1)和(2,0)处的元素。
布尔索引我们可以通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如比较运算符)获得满足指定条件的元素数组。
从数组中筛选出不复杂的元素。
花式索引是指用整数数组进行索引。
花式索引根据索引数组的值取值,作为目标数组的一个轴的下标。对于一维整数数组作为index,如果目标是一维数组,那么index的结果就是对应位置的元素;如果目标是二维数组,那么它就是下标对应的行。
与切片不同,花式索引总是将数据复制到一个新的数组中。
下面的示例取出一个8*4矩阵的第4、2、1和7行来构成一个新数组。
请注意两者之间的区别。它是右边的第二个索引,并且(先选择行,然后选择列)是所需数据所在列的下标。
列式选择:要使用np.ix_
四个Numpy数组操作修改数组整形的形状,而不改变数据。flatten,平面数组元素的迭代器,返回数组的副本,对副本所做的更改不会影响原始数组。ravel返回扩展的数组。numpy . shape numpy . shape修改形状而不更改数据。格式如下:numpy。reshape (arr,new shape,order= c )
Arr:要修改形状数组newshape: integer或integer array,新形状应该与原始形状顺序兼容:“c”-按行,“f”-按列,“a”-原始顺序,“k”-元素在内存中出现的顺序。
翻转数组函数描述了转置数组的维数。t和self.transpose()。同一个rollaxis向后滚动指定的轴。交换数组的两个轴。转置函数用于交换数组的维数。格式如下:
numpy.transpose(arr,axes)
Numpy.ndarray.T类似于numpy.transpose:不贴例子。
Numpy.rollaxis numpy.rollaxis函数按以下格式将特定轴滚动回特定位置:
numpy.rollaxis(arr,axis,start)参数说明:
Arr:数组轴:向后滚动的轴,其他轴的相对位置不变。start:默认值为零,表示完整滚动。将滚动到特定位置。
关于轴的例子很抽象,只看概念很难理解。我的理解是:给纸上的每个数字编号。
上面的例子,0(000),1(001),2(010),3(011),4(100),5(101),6(110),7(111)
这个轴2滚动,对于000,001-100,010-001,011-101,100-010,101-110,110-011.111不变。
结合前面的数组比较,很容易理解这一点。
注意哪里:
numpy.where() numpy.where()函数返回输入数组中满足给定条件的元素的索引。
其中等效于if条件。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。