一. 索引
1. 普通索引
① 一维数组索引
② 二维数组索引
③ 三维数组索引
2. 布尔索引
筛选时,True所对应的位置为所选,False则淘汰。
3. 花式索引
指的是利用整数数组(或列表)进行索引。
①
②
当一次传入多个索引数组,会返回一个一维数组,其中的元素对应各个索引元组。如下,
数组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)。
也就是说传入两个索引数组,相当于传入了一组平面坐标,从而进行了定位。
③ 传入多个索引数组(要使用np.ix_)
二 .切片
切片具体可见我另一篇
Numpy中的切片代表原数组一段区间的引用,而不是拷贝,也就是说我们修改切片中的内容是会影响原数组的。因为Numpy是为了大数据计算而诞生的,大数据计算显然性能是一个非常重要的考量指标。如果这里不是设计成引用,而是拷贝的话,那么当一个大的切片产生的时候,必然会涉及到大量拷贝的操作。不仅非常消耗内存,并且也会占用大量计算资源。如果使用引用可以非常快速地返回结果。
那问题来了,如果我们想要拷贝出一份切片出来,而不是获得一个切片应该怎么办?答案也很简单,我们可以调用copy方法,获取一份拷贝。如
1. 一维数组切片
2. 二维数组切片
3. 三维数组切片
三. 广播
在Numpy计算当中,广播指的是将一个小的数据应用在大数据的计算上。比如我们想要对Numpy中的数组每一位的元素都加上3,我们当然可以创造出一个同样大小的数组来,然后再把它们相加。但是大可不必这么麻烦,我们直接用原数组加上3即可,Numpy内部会发现3和我们的数据大小不一致,然后自动帮我们把3拓充到和我们的数据一样大小的数组再进行计算:
它其实等价于:
广播并不是只可以用在数组和一个整数之间,还可以用在数组和另外一个规模更小的数组当中,但是会对两者的shape有所要求。Numpy规定,两个数组的shape必须相等或者其中一个为1才可以执行广播操作。
比如创建一个arr数组的shape是(2, 3),则可让它和一个大小是(2, 1)或者是(1, 3)的“小数组”进行运算,这同样是支持的。
例1
四. 其他操作
1. numpy.transpose()
2. numpy.rollaxis()
同理:
3. numpy.swapaxes()
同样可以从元素所在坐标的角度去理解,比如a的元素1,原坐标是(0,0,1),经过a.swapaxes(2, 1)转换后的坐标是(0,1,0),如上图。
4. numpy.broadcast_to()
5. numpy.expand_dims()
5. numpy.squeeze()
6. numpy.concatenate()
7. numpy.stack()
例1
例2
例3
8. numpy.hstack(), numpy.vstack()
9. numpy.split()
10. numpy.resize()
11. numpy.append()
12. numpy.insert()
13. numpy.delete()
14. numpy.unique()