NumPy切片和索引


NumPy - 切片和索引

ndarray物件的內容可以通過索引或切片來存取和修改,就像 Python 的內建容器物件一樣。

如前所述,ndarray物件中的元素遵循基於零的索引。 有三種可用的索引方法型別: 欄位存取,基本切片高階索引

基本切片是 Python 中基本切片概念到 n 維的擴充套件。 通過將startstopstep引數提供給內建的slice函式來構造一個 Python slice物件。 此slice物件被傳遞給陣列來提取陣列的一部分。

範例 1

import numpy as np
a = np.arange(10)
s = slice(2,7,2)  
print a[s]

輸出如下:

[2  4  6]

在上面的例子中,ndarray物件由arange()函式建立。 然後,分別用起始,終止和步長值272定義切片物件。 當這個切片物件傳遞給ndarray時,會對它的一部分進行切片,從索引27,步長為2

通過將由冒號分隔的切片引數(start:stop:step)直接提供給ndarray物件,也可以獲得相同的結果。

範例 2

import numpy as np
a = np.arange(10)
b = a[2:7:2]  
print b

輸出如下:

[2  4  6]

如果只輸入一個引數,則將返回與索引對應的單個專案。 如果使用a:,則從該索引向後的所有專案將被提取。 如果使用兩個引數(以:分隔),則對兩個索引(不包括停止索引)之間的元素以預設步驟進行切片。

範例 3

# 對單個元素進行切片  
import numpy as np

a = np.arange(10)
b = a[5]  
print b

輸出如下:

5

範例 4

# 對始於索引的元素進行切片  
import numpy as np
a = np.arange(10)  
print a[2:]

輸出如下:

[2  3  4  5  6  7  8  9]

範例 5

# 對索引之間的元素進行切片  
import numpy as np
a = np.arange(10)  
print a[2:5]

輸出如下:

[2  3  4]

上面的描述也可用於多維ndarray

範例 6

import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print a
# 對始於索引的元素進行切片  
print  '現在我們從索引 a[1:] 開始對陣列切片'  
print a[1:]

輸出如下:

[[1 2 3]
 [3 4 5]
 [4 5 6]]

現在我們從索引 a[1:] 開始對陣列切片
[[3 4 5]
 [4 5 6]]

切片還可以包括省略號(...),來使選擇元組的長度與陣列的維度相同。 如果在行位置使用省略號,它將返回包含行中元素的ndarray

範例 7

# 最開始的陣列  
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print  '我們的陣列是:'  
print a
print  '\n'  
# 這會返回第二列元素的陣列:  
print  '第二列的元素是:'  
print a[...,1]  
print  '\n'  
# 現在我們從第二行切片所有元素:  
print  '第二行的元素是:'  
print a[1,...]  
print  '\n'  
# 現在我們從第二列向後切片所有元素:
print  '第二列及其剩餘元素是:'  
print a[...,1:]

輸出如下:

我們的陣列是:
[[1 2 3]
 [3 4 5]
 [4 5 6]]

第二列的元素是:
[2 4 5]

第二行的元素是:
[3 4 5]

第二列及其剩餘元素是:
[[2 3]
 [4 5]
 [5 6]]