NumPy基础:数组和矢量计算(三)

上一篇:NumPy基础:数组和矢量计算(二)

切片索引

ndarray的切片语法跟Python列表这样的一维对象类似
NumPy基础:数组和矢量计算(三)

=====================================

对于二维数组其切片方式稍微不同

NumPy基础:数组和矢量计算(三)
==切片是沿着一个轴向选取元素的。==表达式arr2d[:2]可以被认为是“选取arr2d的前两行”。

=====================================
NumPy基础:数组和矢量计算(三)
也可以一次传入多个切片,进行切片时,只能得到相同维数的数组视图。

=====================================

通过将整数索引和切片混合,可以得到低维度的切片。
只有冒号表示选取整个轴
NumPy基础:数组和矢量计算(三)

=====================================

对切片表达式的赋值操作也会被扩散到整个选区
NumPy基础:数组和矢量计算(三)

布尔型索引

NumPy基础:数组和矢量计算(三)
每个名字都对应data数组中的一行,选出对应于名字"zhao"的所有行。进行数组的比较运算,其也是矢量化对names和字符串"Bob"的比较运算将会产生一个布尔型数组

=====================================
NumPy基础:数组和矢量计算(三)
这个布尔型数组可用于数组索引

=====================================
NumPy基础:数组和矢量计算(三)
布尔型数组的长度必须跟被索引的轴长度一致。如果布尔型数组的长度不对,布尔型选择就会出错,影响后面的结果。
还可以在此基础上索引列

=====================================
NumPy基础:数组和矢量计算(三)
NumPy基础:数组和矢量计算(三)

=====================================

选择除"zhao"以外的其他值,既可以使用不等于符号(!=),也可以通过~对条件进行否定
NumPy基础:数组和矢量计算(三)

NumPy基础:数组和矢量计算(三)
NumPy基础:数组和矢量计算(三)

=====================================

需要组合应用多个布尔条件,使用&(和)、|(或)之类的布尔算术运算符Python关键字and和or在布尔型数组中无效。要使用&与|。
NumPy基础:数组和矢量计算(三)

=====================================

布尔型数组设置值是一种经常用到的手段
NumPy基础:数组和矢量计算(三)

花式索引

花式索引(Fancy indexing)是一个NumPy术语,它指的是利用整数数组进行索引

NumPy基础:数组和矢量计算(三)

=====================================

以特定顺序选取行子集,只需传入一个用于指定顺序的整数列表或ndarray。使用负数索引将会从末尾开始选取行。
NumPy基础:数组和矢量计算(三)

=====================================

一次传入多个索引数组会有一点特别。它返回的是一个一维数组,其中的元素对应各个索引元组
NumPy基础:数组和矢量计算(三)
NumPy基础:数组和矢量计算(三)

(reshape方法先挖个坑。。。)
最终选出的是元素(1,0)、(5,3)、(7,1)和(2,2)。无论数组是多少维的,花式索引总是一维的。

=====================================
NumPy基础:数组和矢量计算(三)
选取矩阵的行列子集应该是矩形区域的形式。花式索引跟切片不一样,它总是将数据复制到新数组中。

数组转置和轴对换

==转置是重塑的一种特殊形式,它返回的是源数据的视图(不会进行任何复制操
作)。==数组不仅有transpose方法,还有一个特殊的T属性。利用np.dot计算矩阵内积会用到该操作。
NumPy基础:数组和矢量计算(三)

=====================================
对于高维数组,transpose需要得到一个由轴编号组成的元组才能对这些轴进行转置
NumPy基础:数组和矢量计算(三)
第一个轴被换成了第二个,第二个轴被换成了第一个,最后一个轴不变。

=====================================

T属性就是进行轴对换

ndarray还有一个swapaxes方法,它需要接受一对轴编号。swapaxes也是返回源数据的视图(不会进行任何复制操作)
NumPy基础:数组和矢量计算(三)

元素级数组函数

NumPy基础:数组和矢量计算(三)

这些都是一元(unary)ufunc。

=====================================

另外一些(如add或maximum)接受2个数组(因此也叫二元(binary)ufunc),并返回一个结果数组。
NumPy基础:数组和矢量计算(三)

=====================================

modf返回浮点数数组的小数和整数部分
NumPy基础:数组和矢量计算(三)

利用数组进行数据处理

NumPy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环)
用数组表达式代替循环的做法,通常被称为矢量化。(手抖不小心点开了。。。)
进行简单的sqrt(x^2 +y^2)NumPy基础:数组和矢量计算(三)
NumPy基础:数组和矢量计算(三)

条件逻辑表述为数组运算

numpy.where函数是三元表达式x if condition else y的矢量化。
根据cond中的值选取xarr和yarr的值:当cond中的值为True时,选取xarr的值,否则从yarr中选取。
NumPy基础:数组和矢量计算(三)

=====================================

np.where的第二个和第三个参数不必是数组,它们都可以是标量值。where通常用于根据另一个数组而产生一个新的数组。
NumPy基础:数组和矢量计算(三)

=====================================

使用np.where,可以将标量和数组结合起来。传递给where的数组大小可以不相等,甚至可以是标量值。
NumPy基础:数组和矢量计算(三)

++++++++++++++++++++++++++++++++++++

下一篇:NumPy基础:数组和矢量计算(四)