ndarray的切片語法跟Python列表這樣的一維對象差不多:
In [1]:
<code>import
numpyas
np/<code>
In [2]:
<code>arr
= np.arange(10
)arr[1
:6
]/<code>
Out[2]:
<code>array([1,
2
,
3
,
4
,
5
])
/<code>
高緯度對象的花樣更多一些,你可以在一個或多個軸上進行切片,也可以跟整數索引混合使用。對於二維數組,其切片方式稍顯不同:
In [3]:
<code>arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]]
)arr2d/<code>
Out[3]:
<code>array([[1,
2
,
3
],
[4,
5
,
6
],
[7,
8
,
9
]])
/<code>
In [4]:
<code>arr2d
[:2]
/<code>
Out[4]:
<code>array([[1, 2, 3], [4, 5, 6]]
)/<code>
可以看出,它是沿著0軸(第一個軸)切片的。也就是說,切片是沿著一個軸向選取元素的。你可以傳入多個切片,就像傳入多個索引那樣:
In [5]:
<code>arr2d
[:2, 1:]
/<code>
Out[5]:
<code>array([[2, 3], [5, 6]]
)/<code>
像這樣進行切片時,只能得到相同維度的數組視圖。通過將整數索引和切片混合,可以得到更低維度的切片:
In [6]:
<code>arr2d
[1, :2]
/<code>
Out[6]:
<code>array
([4
,5
])/<code>
In [7]:
<code>arr2d
[2, :1]
/<code>
Out[7]:
<code>array
([7
])/<code>
你可以像下面這樣只對高維軸進行切片:
In [8]:
<code>arr2d
[:, :1]
/<code>
Out[8]:
<code>array([[1], [4], [7]]
)/<code>
只有冒號':'代表選取整個軸。 自然,對切片表達式的賦值操作也會被擴散到整個選區。
In [9]:
<code>arr2d[:2, 1:] = 0arr2d
/<code>
Out[9]:
<code>array([[1,
0
,
0
],
[4,
0
,
0
],
[7,
8
,
9
]])
/<code>