numpy矢量化运算

一 序

   本文继续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
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值