Numpy學習之 一維數組元素選取

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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章