矩阵与矩阵转置相乘_矩阵相乘 转置_numpy转置

numpy转置_矩阵相乘 转置_矩阵与矩阵转置相乘

访问flyai.club,一键创建你的人工智能项目

矩阵与矩阵转置相乘_矩阵相乘 转置_numpy转置

教程|Python之Numpy ndarray 基本介绍 3

知识点10. 布尔型索引

来看这样一个例子,假设我们有一个用于存储数据的数组以及一个存储姓名的数组(含有重复项)。在这里,我将使用numpy.random中的randn函数生成一些正态分布的随机数据:

矩阵与矩阵转置相乘_矩阵相乘 转置_numpy转置

假设每个名字都对应data数组中的一行numpy转置,而我们想要选出对应于名字”Bob”的所有行。跟算术运算一样,数组的比较运算(如==)也是矢量化的。因此,对names和字符串”Bob”的比较运算将会产生一个布尔型数组:

这个布尔型数组可用于数组索引:

注意:如果布尔型数组的长度不对,布尔型选择就会出错,因此一定要小心。

布尔型数组的长度必须跟被索引的轴长度一致。此外numpy转置,还可以将布尔型数组跟切片、整数混合使用:

下面的例子,我选取了names == ‘Bob’的行,并索引了列:

numpy转置_矩阵相乘 转置_矩阵与矩阵转置相乘

要选择除”Bob”以外的其他值,既可以使用不等于符号(!=),也可以通过~对条件进行否定:

矩阵与矩阵转置相乘_矩阵相乘 转置_numpy转置

~操作符用来反转条件很好用:

矩阵与矩阵转置相乘_矩阵相乘 转置_numpy转置

选取这三个名字中的两个需要组合应用多个布尔条件,使用&(和)、|(或)之类的布尔算术运算符即可:

矩阵相乘 转置_numpy转置_矩阵与矩阵转置相乘

通过布尔型索引选取数组中的数据,将总是创建数据的副本,即使返回一模一样的数组也是如此。

注意:Python关键字and和or在布尔型数组中无效。要使用&与|。

通过布尔型数组设置值是一种经常用到的手段。为了将data中的所有负值都设置为0,我们只需:

矩阵与矩阵转置相乘_numpy转置_矩阵相乘 转置

通过一维布尔数组设置整行或列的值也很简单:

numpy转置_矩阵相乘 转置_矩阵与矩阵转置相乘

知识点11. 花式索引

花式索引(Fancy indexing)是一个NumPy术语,它指的是利用整数数组进行索引。假设我们有一个8×4数组:

numpy转置_矩阵相乘 转置_矩阵与矩阵转置相乘

为了以特定顺序选取行子集,只需传入一个用于指定顺序的整数列表或ndarray即可:

矩阵相乘 转置_numpy转置_矩阵与矩阵转置相乘

这段代码确实达到我们的要求了!使用负数索引将会从末尾开始选取行

矩阵相乘 转置_矩阵与矩阵转置相乘_numpy转置

一次传入多个索引数组会有一点特别。它返回的是一个一维数组,其中的元素对应各个索引元组:

矩阵相乘 转置_矩阵与矩阵转置相乘_numpy转置

这个花式索引的行为可能会跟某些用户的预期不一样(包括我在内),选取矩阵的行列子集应该是矩形区域的形式才对。下面是得到该结果的一个办法:

矩阵与矩阵转置相乘_numpy转置_矩阵相乘 转置

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

知识点12. 数组转制和轴对换

转置是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操作)。数组不仅有transpose方法,还有一个特殊的T属性:

矩阵相乘 转置_矩阵与矩阵转置相乘_numpy转置

在进行矩阵计算时,经常需要用到该操作,比如利用np.dot计算矩阵内积:

numpy转置_矩阵与矩阵转置相乘_矩阵相乘 转置

对于高维数组,transpose需要得到一个由轴编号组成的元组才能对这些轴进行转置(比较费脑子):

矩阵与矩阵转置相乘_numpy转置_矩阵相乘 转置

简单的转置可以使用.T,它其实就是进行轴对换而已。ndarray还有一个swapaxes方法,它需要接受一对轴编号:

numpy转置_矩阵与矩阵转置相乘_矩阵相乘 转置

swapaxes也是返回源数据的视图(不会进行任何复制操作)

教程|Jupyter Notebook初级教程——迷死人的基础操作

教程|Jupyter Notebook基础教程——快捷键的使用

教程|Python之Numpy ndarray 基本介绍 1

教程|Python之Numpy ndarray 基本介绍 2

教程|Python之Numpy ndarray 基本介绍 3

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688