Numpy中最常用的是ndarray数组,而因为其是多维的有时候需要在不同维度上进行切片。

其实它的切片方式与Matlab类似,熟练以后就很好掌握了。

基本原理是这样,首先切片需要使用序列生成即冒号运算符:

一个单冒号为选取整个序列,也可以指定范围,如1:5表示1~4(包括)这4个元素。同时可以指定步长如1:6:2表示选取1,3,5这3个元素,这个与Python的列表切片是一致的。

然后,使用逗号,来区分轴(axis),轴可以简单地理解为在某个维度上的投影。例如axis=0指的就是行,axis=1指的就是列。那么第一个选取就是行,第二个选取的就是列,中间用逗号隔开,例如下面的一条语句。

1
arr[:,2]

在行上选取的是:,即整个序列,在列上选取的是2,即第3列,这样得到的结果就是第三列(注意这时候得到的是行向量而不是列向量)

下面给一个小例子小结一下

1
2
3
4
5
6
7
from numpy import *
a = arange(9).reshape((3,3)) # 生成3*3的数组
print a
print a[1,2] # 选取第2行第3列
print a[1,:] # 选取第1行
print a[:,2] # 选取第3列
print a[0:2,0:2] # 选取第2~3行,第2~3列,此时得到的是2*2矩阵

运行结果如下:

1
2
3
4
5
6
7
8
[[0 1 2]
[3 4 5]
[6 7 8]]
5
[3 4 5]
[2 5 8]
[[0 1]
[3 4]]

以上还只是二维的情况,其实多维的情况也同样适用。不过对于我来说这些也基本够用了,做科学计算什么的水平也比较低,哈哈。