ndarray的一維數組的元素選取與Python列表的切片操作很相似,與列表不同的時,獲取的數據組成一個新數組但與原有的數組共享一個內存存儲空間,即數據更改獲取得到的數據中某個元素的值,原有數組也會產生相應變化。
下面列舉其種常見的選取方式
首頁使用arange快速創建一個一維數組
#coding=utf-8
import numpy as np
arr1 = np.arange(10)
[0 1 2 3 4 5 6 7 8 9]
1.使用整數爲下標選取數組中的某一個元素
#取第1個元素
print arr1[0] #輸出 0
2.使用負數爲下標反向選擇數據中的某一個元素
#取第1個元素
print arr1[-1] #輸出9
3.使用切片做爲下標選取數據中一部分
(1) 完整的切片形式
[開始索引:結束索引:步長]
如省略開始索引,則開始索引值爲0
如省略結束索引,則結束索引值爲數組對應元素最大索引值
如省略步長,則步長值爲1
#取索引爲0(包含)到索引爲2(不包含)之間的元素且步長爲1(即第1個和第2個元素)
print arr1[0:2:1] #輸出 [0,1]
#取索引爲0(包含)到索引爲10(不包含)之間的元素且步長爲2(即第1、3、5、7、9個元素)
print arr1[0:10:2] #[0 2 4 6 8]
(2) 省略步長
#取索引爲0(包含)到索引爲2(不包含)之間的元素(即第1個和第2個元素)
print arr1[0:2] #輸出 [0,1]
(3) 省略結束索引
#從索引爲1的元素且步長爲2選取元素
print arr1[1::2] #輸出 [1 3 5 7 9]
(4) 省略結束索引和步長
#從索引爲1的元素開始選取元素
print arr1[1:] #輸出 [1 2 3 4 5 6 7 8 9]
print arr1[1::] #與上面效果相同,輸出 [1 2 3 4 5 6 7 8 9]
(5) 省略開始索引
#選取索引爲0到2之間
print arr1[:2:1] #輸出 [0,1] 這個與arr1[0:2]效果相同
(5) 省略開始索引及步長
#選取索引爲0到2之間
print arr1[:2:] #輸出 [0,1] 這個與arr1[0:2]效果相同
(6) 省略開始索引及結束索引
#以步長爲2選擇數組中的元素
print arr1[::2] #輸出 [0 2 4 6 8]
4.使用負數步長來翻轉數組
#使用負數索引來翻轉
print arr1[::-1] #輸出[9 8 7 6 5 4 3 2 1 0]
print arr1[::-2] #輸出[9 7 5 3 1]
備註:如果是用切片形式選擇數組中的一部分元素,會形成一個新的數組(可以通過 type查看)且其與原有數組共享一個內存存儲塊,如果更改新生成的數組中的元素值,則原有數據對應索引位置的元素的值也會改變,如下列所示
import numpy as np
arr1 = np.arange(10)
print arr1 #輸出 [0 1 2 3 4 5 6 7 8 9]
arr2= arr1[2:5]
print arr2 #輸出 [2 3 4]
arr2[1]=20
print arr2 #輸出 [2 20 4]
print arr1 #輸出 [0 1 2 20 4 5 6 7 8 9]
5、使用整數列表選取
使用整數列表對數組進行選取操作時,會將整數列表的值做爲下標來選取數組;與使用切片形式做爲下標不同的是,選取得到的數組不會與原有數據共享一個內存存儲塊;即更改得到的新數組值不會影響原有數組
# coding=utf-8
import numpy as np
arr1 = np.arange(10)
print arr1 #輸出 [0 1 2 3 4 5 6 7 8 9]
arr2=arr1[[1,1,5,6]]
print arr2 #輸出 [1 1 5 6 ]
arr2[0]=-1 #更改得到的新數組值不會影響原有數組
print arr1 #輸出 [0 1 2 3 4 5 6 7 8 9]