ndarray
對象的內(nèi)容可以通過索引或切片來訪問和修改,就像 Python 的內(nèi)置容器對象一樣。
如前所述,ndarray
對象中的元素遵循基于零的索引。 有三種可用的索引方法類型: 字段訪問,基本切片和高級索引。
基本切片是 Python 中基本切片概念到 n 維的擴(kuò)展。 通過將start
,stop
和step
參數(shù)提供給內(nèi)置的slice
函數(shù)來構(gòu)造一個 Python slice
對象。 此slice
對象被傳遞給數(shù)組來提取數(shù)組的一部分。
import numpy as np
a = np.arange(10)
s = slice(2,7,2)
print a[s]
輸出如下:
[2 4 6]
在上面的例子中,ndarray
對象由arange()
函數(shù)創(chuàng)建。 然后,分別用起始,終止和步長值2
,7
和2
定義切片對象。 當(dāng)這個切片對象傳遞給ndarray
時,會對它的一部分進(jìn)行切片,從索引2
到7
,步長為2
。
通過將由冒號分隔的切片參數(shù)(start:stop:step
)直接提供給ndarray
對象,也可以獲得相同的結(jié)果。
import numpy as np
a = np.arange(10)
b = a[2:7:2]
print b
輸出如下:
[2 4 6]
如果只輸入一個參數(shù),則將返回與索引對應(yīng)的單個項目。 如果使用a:
,則從該索引向后的所有項目將被提取。 如果使用兩個參數(shù)(以:
分隔),則對兩個索引(不包括停止索引)之間的元素以默認(rèn)步驟進(jìn)行切片。
# 對單個元素進(jìn)行切片
import numpy as np
a = np.arange(10)
b = a[5]
print b
輸出如下:
5
# 對始于索引的元素進(jìn)行切片
import numpy as np
a = np.arange(10)
print a[2:]
輸出如下:
[2 3 4 5 6 7 8 9]
# 對索引之間的元素進(jìn)行切片
import numpy as np
a = np.arange(10)
print a[2:5]
輸出如下:
[2 3 4]
上面的描述也可用于多維ndarray
。
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print a
# 對始于索引的元素進(jìn)行切片
print '現(xiàn)在我們從索引 a[1:] 開始對數(shù)組切片'
print a[1:]
輸出如下:
[[1 2 3]
[3 4 5]
[4 5 6]]
現(xiàn)在我們從索引 a[1:] 開始對數(shù)組切片
[[3 4 5]
[4 5 6]]
切片還可以包括省略號(...
),來使選擇元組的長度與數(shù)組的維度相同。 如果在行位置使用省略號,它將返回包含行中元素的ndarray
。
# 最開始的數(shù)組
import numpy as np
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print '我們的數(shù)組是:'
print a
print '\n'
# 這會返回第二列元素的數(shù)組:
print '第二列的元素是:'
print a[...,1]
print '\n'
# 現(xiàn)在我們從第二行切片所有元素:
print '第二行的元素是:'
print a[1,...]
print '\n'
# 現(xiàn)在我們從第二列向后切片所有元素:
print '第二列及其剩余元素是:'
print a[...,1:]
輸出如下:
我們的數(shù)組是:
[[1 2 3]
[3 4 5]
[4 5 6]]
第二列的元素是:
[2 4 5]
第二行的元素是:
[3 4 5]
第二列及其剩余元素是:
[[2 3]
[4 5]
[5 6]]