一. 索引

1. 普通索引

① 一维数组索引

python 列表布尔索引 numpy布尔索引二维_大数据

② 二维数组索引

python 列表布尔索引 numpy布尔索引二维_一维数组_02

③ 三维数组索引

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_03

2. 布尔索引

筛选时,True所对应的位置为所选,False则淘汰。

python 列表布尔索引 numpy布尔索引二维_一维数组_04

python 列表布尔索引 numpy布尔索引二维_数组_05

3. 花式索引

指的是利用整数数组(或列表)进行索引。

python 列表布尔索引 numpy布尔索引二维_数组_06

 

python 列表布尔索引 numpy布尔索引二维_数组_07

当一次传入多个索引数组,会返回一个一维数组,其中的元素对应各个索引元组。如下,

数组b[[1, 2, 3], [4, 5, 6]]经索引[[0, 1, 1], [0, 1,  2]], 返回了一维数组[1, 5 ,6]。其中元素1对应坐标(0, 0), 元素5对应坐标(1, 1), 元素6对应坐标(1, 2)。

也就是说传入两个索引数组,相当于传入了一组平面坐标,从而进行了定位。

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_08

python 列表布尔索引 numpy布尔索引二维_一维数组_09

python 列表布尔索引 numpy布尔索引二维_数组_10

③ 传入多个索引数组(要使用np.ix_)

python 列表布尔索引 numpy布尔索引二维_数组_11

python 列表布尔索引 numpy布尔索引二维_数组_12

 

二 .切片

切片具体可见我另一篇 

Numpy中的切片代表原数组一段区间的引用,而不是拷贝,也就是说我们修改切片中的内容是会影响原数组的。因为Numpy是为了大数据计算而诞生的,大数据计算显然性能是一个非常重要的考量指标。如果这里不是设计成引用,而是拷贝的话,那么当一个大的切片产生的时候,必然会涉及到大量拷贝的操作。不仅非常消耗内存,并且也会占用大量计算资源。如果使用引用可以非常快速地返回结果。

那问题来了,如果我们想要拷贝出一份切片出来,而不是获得一个切片应该怎么办?答案也很简单,我们可以调用copy方法,获取一份拷贝。如

python 列表布尔索引 numpy布尔索引二维_大数据_13

 

1. 一维数组切片

python 列表布尔索引 numpy布尔索引二维_数组_14

2. 二维数组切片

python 列表布尔索引 numpy布尔索引二维_数组_15

3. 三维数组切片

python 列表布尔索引 numpy布尔索引二维_数组_16

 

三. 广播

python 列表布尔索引 numpy布尔索引二维_一维数组_17

在Numpy计算当中,广播指的是将一个小的数据应用在大数据的计算上。比如我们想要对Numpy中的数组每一位的元素都加上3,我们当然可以创造出一个同样大小的数组来,然后再把它们相加。但是大可不必这么麻烦,我们直接用原数组加上3即可,Numpy内部会发现3和我们的数据大小不一致,然后自动帮我们把3拓充到和我们的数据一样大小的数组再进行计算

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_18

它其实等价于:

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_19

广播并不是只可以用在数组和一个整数之间,还可以用在数组和另外一个规模更小的数组当中,但是会对两者的shape有所要求。Numpy规定,两个数组的shape必须相等或者其中一个为1才可以执行广播操作。

比如创建一个arr数组的shape是(2, 3),则可让它和一个大小是(2, 1)或者是(1, 3)的“小数组”进行运算,这同样是支持的。

python 列表布尔索引 numpy布尔索引二维_数组_20

例1

python 列表布尔索引 numpy布尔索引二维_大数据_21

 

四. 其他操作

1.  numpy.transpose()

python 列表布尔索引 numpy布尔索引二维_大数据_22

python 列表布尔索引 numpy布尔索引二维_一维数组_23

2.  numpy.rollaxis()

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_24

python 列表布尔索引 numpy布尔索引二维_一维数组_25

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_26

同理:

python 列表布尔索引 numpy布尔索引二维_大数据_27

3. numpy.swapaxes()

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_28

python 列表布尔索引 numpy布尔索引二维_大数据_29

同样可以从元素所在坐标的角度去理解,比如a的元素1,原坐标是(0,0,1),经过a.swapaxes(2, 1)转换后的坐标是(0,1,0),如上图。

4. numpy.broadcast_to()

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_30

python 列表布尔索引 numpy布尔索引二维_一维数组_31

5. numpy.expand_dims()

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_32

python 列表布尔索引 numpy布尔索引二维_一维数组_33

5. numpy.squeeze()

python 列表布尔索引 numpy布尔索引二维_一维数组_34

python 列表布尔索引 numpy布尔索引二维_大数据_35

6. numpy.concatenate()

python 列表布尔索引 numpy布尔索引二维_一维数组_36

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_37

7. numpy.stack()

python 列表布尔索引 numpy布尔索引二维_大数据_38

例1

python 列表布尔索引 numpy布尔索引二维_一维数组_39

python 列表布尔索引 numpy布尔索引二维_大数据_40

例2

python 列表布尔索引 numpy布尔索引二维_大数据_41

python 列表布尔索引 numpy布尔索引二维_大数据_42

例3

python 列表布尔索引 numpy布尔索引二维_数组_43

8. numpy.hstack(), numpy.vstack()

python 列表布尔索引 numpy布尔索引二维_数组_44

python 列表布尔索引 numpy布尔索引二维_一维数组_45

python 列表布尔索引 numpy布尔索引二维_大数据_46

9. numpy.split()

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_47

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_48

python 列表布尔索引 numpy布尔索引二维_数组_49

python 列表布尔索引 numpy布尔索引二维_一维数组_50

10.  numpy.resize()

python 列表布尔索引 numpy布尔索引二维_一维数组_51

python 列表布尔索引 numpy布尔索引二维_大数据_52

11. numpy.append()

python 列表布尔索引 numpy布尔索引二维_数组_53

python 列表布尔索引 numpy布尔索引二维_数组_54

12. numpy.insert()

python 列表布尔索引 numpy布尔索引二维_一维数组_55

 

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_56

13. numpy.delete()

python 列表布尔索引 numpy布尔索引二维_一维数组_57

python 列表布尔索引 numpy布尔索引二维_大数据_58

14. numpy.unique()

python 列表布尔索引 numpy布尔索引二维_一维数组_59

python 列表布尔索引 numpy布尔索引二维_python 列表布尔索引_60