首页 > 编程知识 正文

python矢量化运算,numpy向量化编程

时间:2023-05-03 17:39:22 阅读:225647 作者:4256

一 序

   本文继续numpy学习。 

二 矢量化运算

  numpy的数组通常在不用编写循环的情况下进行批量运算。

一维数组

  

二维数组

其他操作:加减乘除,以乘法做例子

NumPy 广播(Broadcast)

广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行。

如果两个数组 a 和 b 形状相同,即满足 a.shape == b.shape,那么 a*b 的结果就是 a 与 b 数组对应位相乘。这要求维数相同,且各维度的长度相同。

当运算中的 2 个数组的形状不同时,numpy 将自动触发广播机制

三 NumPy 切片和索引

 ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

多维数组同样适用上述索引提取方法:

numpy数组比较运算

整数数组索引

以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。

布尔索引

我们可以通过一个布尔数组来索引目标数组。

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

从数组中过滤掉非复数元素。

花式索引

花式索引指的是利用整数数组进行索引。

花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。对于使用一维整型数组作为索引,如果目标是一维数组,那么索引的结果就是对应位置的元素;如果目标是二维数组,那么就是对应下标的行。

花式索引跟切片不一样,它总是将数据复制到新数组中。

下面的例子取出8*4矩阵的第4,2,1,7行组成新的数组

注意两个的差异。右侧是第二个索引,(先选行再选列)就是单独指出要的数据所在列的下标。

列式选择:要使用np.ix_

四 Numpy 数组操作  修改数组形状 reshape不改变数据的条件下修改形状flat数组元素迭代器flatten返回一份数组拷贝,对拷贝所做的修改不会影响原始数组ravel返回展开数组numpy.reshape

numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order='C')

arr:要修改形状的数组newshape:整数或者整数数组,新的形状应当兼容原有形状order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。

翻转数组 函数描述transpose对换数组的维度ndarray.T和 self.transpose() 相同rollaxis向后滚动指定的轴swapaxes对换数组的两个轴numpy.transpose

numpy.transpose 函数用于对换数组的维度,格式如下:

numpy.transpose(arr, axes)

numpy.ndarray.T 类似 numpy.transpose:不贴例子了

numpy.rollaxis

numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下:

numpy.rollaxis(arr, axis, start)

参数说明:

arr:数组axis:要向后滚动的轴,其它轴的相对位置不会改变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不变。

结合这个再看上面的前面数组对比就容易理解了。

注意where:

numpy.where()

numpy.where() 函数返回输入数组中满足给定条件的元素的索引。

where相当于if condition条件成立。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。