2.3 NumPy数组的运算

数组,不需要编写循环即可对数据执行批量运算!NumPy用户称此特性为矢量化(vectorization)。

(1)大小相等的数组之间的任何算术运算都会将运算应用到元素级

python 向量求和 python向量化计算_python 向量求和

  (2)数组与标量的算术运算将标量值传播到各个元素

python 向量求和 python向量化计算_python 向量求和_02

  PS:**在python中表示幂运算,如,2**3表示2的3次方

(3)大小相同的数组之间的比较会生成布尔值数组

python 向量求和 python向量化计算_python 向量求和_03

  (不同大小的数组之间的运算叫广播,本书不需要多广播机制深入理解)

 

2.4 基本的索引和切片

数组与列表的重要区别在于:数组切片是原始数组的视图,这意味着数据不会被复制,视图上的人任何修改都会直接反映到源数组上。

python 向量求和 python向量化计算_转置_04

(1)

(2)标量值和数组都可以被赋值给数组中的元素

python 向量求和 python向量化计算_转置_05

 (3)

python 向量求和 python向量化计算_2d_06

 (4)切片索引 - 一维对象,其语法与python的列表差不多

python 向量求和 python向量化计算_数组_07

(5)切片索引 - 二维对象,切片是沿着一个轴向选取元素的

arr2d[:2]意为沿着第0轴进行切片,并“选取arr2d的前两行”;

arr2d[:1]意为沿着第0轴进行切片,并“选取arr2d的第一行”;

arr2d[:] 意为沿着第0轴进行切片,并“选取arr2d的全部行”,“只有冒号”表示选取整个轴

arr2d[:0]会输出该数组的相关属性。

python 向量求和 python向量化计算_Python数据分析_08

一次传入多个切片

python 向量求和 python向量化计算_python 向量求和_09

通过整数索引和切片混合,得到低维度的切片

如下,选取第二行的前两列

python 向量求和 python向量化计算_转置_10

 如下,选取前两行的第3列

python 向量求和 python向量化计算_python 向量求和_11

 如下,“只有冒号”表示选取整个轴

python 向量求和 python向量化计算_数组_12

 (5)布尔型索引

本例使用一个用于存储数据的数组以及一个存储姓名的数组(含有重复项)

使用numpy.random中的randn函数生成一些正态分布的随即数据:

python 向量求和 python向量化计算_Python数据分析_13

 

 数组的比较运算(如==)也是矢量化的,故,对names和字符串‘Bob’进行比较运算将会产生一个布尔型数组:

python 向量求和 python向量化计算_数组_14

 1) 布尔型数组可用于数组索引(布尔型数组的长度必须跟被索引的轴长度一致)

python 向量求和 python向量化计算_转置_15

 2)布尔型数组跟切片、整数(或整数序列)混合使用:

python 向量求和 python向量化计算_Python数据分析_16

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

python 向量求和 python向量化计算_转置_17

 4)可组合运用多个布尔条件,使用&(和)、|(或)之类的布尔算术运算符。Python关键字and和or在布尔数组中无效,要使用&和|。

python 向量求和 python向量化计算_Python数据分析_18

 5)通过布尔型数组设置值,是一种常用的手段

python 向量求和 python向量化计算_2d_19

(6)花式索引 - 无论数组是多少维的,花式索引总是一维的,且花式索引总视将数据复制到新数组中

花式索引,是一个NumPy术语,指利用整数数组进行索引。

python 向量求和 python向量化计算_Python数据分析_20

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

 

python 向量求和 python向量化计算_Python数据分析_21

 2)使用负数索引,将会从末尾开始选取行:

python 向量求和 python向量化计算_2d_22

 3)一次传入多个索引数组,将返回一个一维数组,其中的元素对应各个索引元组

python 向量求和 python向量化计算_python 向量求和_23

最终选出的元素是(1, 0), (5, 3), (7, 1), (2, 2) . 无论数组是多少维的,花式索引总是一维的

(7)数组转置和轴对换

1)转置 - 在矩阵计算时经常用到,如np.dot计算矩阵内积

转置是重塑的一种特殊形式,返回的是源数据的视图(不会进行任何复制操作)。

python 向量求和 python向量化计算_python 向量求和_24

 转置,在矩阵计算时经常用到,如np.dot计算矩阵内积:

python 向量求和 python向量化计算_数组_25

2)高维数组转置,需要用transpose函数,关于transpose的用法理解,有一定难度,但是参考下面的链接后,非常容易理解。https://bbs.pinggu.org/thread-4565507-1-1.html

python 向量求和 python向量化计算_python 向量求和_26

 

transpose的元组参数(1, 0, 2)实际代表reshape中的元组参数(2, 2, 4),也即0 > 2,1 > 2,2 > 4

transpose中的元组参数(1, 0, 2)意味着第一个轴换成第二个,第二个轴换成第一个,第三个轴不变。

python 向量求和 python向量化计算_数组_27

 

 3)用 .T 对高维数组简单转置,实质就是对轴进行对换

python 向量求和 python向量化计算_转置_28

 

 4)用ndarray的swapaxes方法进行转置,该方法需要接受一对轴编号作为参数,并对轴进行调整用于重组数据。swapaxes(p,q)(p和q是轴的编号)表示对换p和q轴,案例中表示对换1-轴和2-轴。

python 向量求和 python向量化计算_转置_29