numpy学习(布尔型索引)
假设我们有一个用于存储数据的数组以及一个存储姓名的数组(含有重复项)。在这里,我将使用numpy.random中的rand函数生成一些正态分布的随机数据:
假设每个名字都对应data数组中的一行,而我们想要选出对应于名字"Bob"的所有行。跟算术运算一样,数组的比较运算(如==)也是矢量化的。因此,对names和字符串"Bob"的比较运算将会产生一个布尔型数组:
这个 布尔 型 数组 可用 于 数组 索引:
布尔 型 数组 的 长度 必须 跟 被 索引 的 轴 长度 一致。 此外, 还可以 将 布尔 型 数组 跟 切片、 整数 混合 使用:
要 选择 除" Bob" 以外 的 其他 值, 既可以 使用 不等于 符号(!=), 也可以 通过 波浪线 (~) 对 条件 进行 否定:
通过 波浪线 (~) 对 条件 进行 否定(与上一致)
需要 组合 应用 多个 布尔 条件, 使用&( 和)、|( 或) 之类 的 布尔 算术 运算符 即可:
通过 布尔 型 索引 选取 数组 中的 数据, 将 总是 创建 数据 的 副本, 即使 返回 一模一样 的 数组 也是 如此。
Python 关键字 and 和 or 在 布尔 型 数组 中 无效。 通过 布尔 型 数组 设置 值 是一 种 经常 用到 的 手段。 为了 将 data 中的 所有<0.2的都 设置 为 0, 我们 只需:
通过 一 维 布尔 数组 设置 整行 或 列 的 值 也 很 简单: