访问flyai.club,一键创建你的人工智能项目
教程|Python之Numpy ndarray 基本介绍 3
知识点10. 布尔型索引
来看这样一个例子,假设我们有一个用于存储数据的数组以及一个存储姓名的数组(含有重复项)。在这里,我将使用numpy.random中的randn函数生成一些正态分布的随机数据:
假设每个名字都对应data数组中的一行numpy转置,而我们想要选出对应于名字”Bob”的所有行。跟算术运算一样,数组的比较运算(如==)也是矢量化的。因此,对names和字符串”Bob”的比较运算将会产生一个布尔型数组:
这个布尔型数组可用于数组索引:
注意:如果布尔型数组的长度不对,布尔型选择就会出错,因此一定要小心。
布尔型数组的长度必须跟被索引的轴长度一致。此外numpy转置,还可以将布尔型数组跟切片、整数混合使用:
下面的例子,我选取了names == ‘Bob’的行,并索引了列:
要选择除”Bob”以外的其他值,既可以使用不等于符号(!=),也可以通过~对条件进行否定:
~操作符用来反转条件很好用:
选取这三个名字中的两个需要组合应用多个布尔条件,使用&(和)、|(或)之类的布尔算术运算符即可:
通过布尔型索引选取数组中的数据,将总是创建数据的副本,即使返回一模一样的数组也是如此。
注意:Python关键字and和or在布尔型数组中无效。要使用&与|。
通过布尔型数组设置值是一种经常用到的手段。为了将data中的所有负值都设置为0,我们只需:
通过一维布尔数组设置整行或列的值也很简单:
知识点11. 花式索引
花式索引(Fancy indexing)是一个NumPy术语,它指的是利用整数数组进行索引。假设我们有一个8×4数组:
为了以特定顺序选取行子集,只需传入一个用于指定顺序的整数列表或ndarray即可:
这段代码确实达到我们的要求了!使用负数索引将会从末尾开始选取行
一次传入多个索引数组会有一点特别。它返回的是一个一维数组,其中的元素对应各个索引元组:
这个花式索引的行为可能会跟某些用户的预期不一样(包括我在内),选取矩阵的行列子集应该是矩形区域的形式才对。下面是得到该结果的一个办法:
记住,花式索引跟切片不一样,它总是将数据复制到新数组中。
知识点12. 数组转制和轴对换
转置是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。数组不仅有transpose方法,还有一个特殊的T属性:
在进行矩阵计算时,经常需要用到该操作,比如利用np.dot计算矩阵内积:
对于高维数组,transpose需要得到一个由轴编号组成的元组才能对这些轴进行转置(比较费脑子):
简单的转置可以使用.T,它其实就是进行轴对换而已。ndarray还有一个swapaxes方法,它需要接受一对轴编号:
swapaxes也是返回源数据的视图(不会进行任何复制操作)
教程|Jupyter Notebook初级教程——迷死人的基础操作
教程|Jupyter Notebook基础教程——快捷键的使用
教程|Python之Numpy ndarray 基本介绍 1
教程|Python之Numpy ndarray 基本介绍 2
教程|Python之Numpy ndarray 基本介绍 3
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688