2015-12-12 186 views
1

索引numpy的陣列我是一名高中學生,並通過一些numpy的代碼看,我發現沿着澄清關於Python

a = x[:,0:4] 

東西線和X是一個2-d陣列。我知道一個[:],指的是數組a中的所有對象,所以對於x [:,0:4],它是指所有的行和索引爲0,1,2,3的列,而不包括具有索引的列4?

只是試圖得到關於這是如何工作的確認,因爲我看到它在幾種類型的代碼中,只是想確定。

+0

你明白了。這些文檔相當不錯 - [http://docs.scipy.org/doc/numpy/user/basics.indexing.html](http://docs.scipy.org/doc/numpy/user/basics.indexing。 html)和[http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html) – wwii

回答

1

你說得對。這a = x[:,0:4]選擇前四列。

例:第二首「第一維,第二維,等等:

>>> a = np.arange(25).reshape(5, 5) 
>>> a 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]]) 

可以跳過0因爲a[:,:4]的含義一樣a[:,0:4]

>>> a[:,:4] 
array([[ 0, 1, 2, 3], 
     [ 5, 6, 7, 8], 
     [10, 11, 12, 13], 
     [15, 16, 17, 18], 
     [20, 21, 22, 23]]) 

你總是可以想到「。在2D情況下,第一個維度是行,第二個維度是列。

0

是的,這被稱爲片符號和numpy的陣列也可以使用Python切片表示法,所以

>>>x = np.arange(25).reshape(5, 5) 
>>>a = x[:, 0:4] 
>>>a 
array([[ 0, 1, 2, 3], 
    [ 5, 6, 7, 8], 
    [10, 11, 12, 13], 
    [15, 16, 17, 18], 
    [20, 21, 22, 23]]) 

如果使用切片標誌,x將是a一個視圖,而不是複製,所以如果更改數組x中的值,則該值也將在a中更改。

>>>x[1,1] = 1000 
>>>a 
array([[ 0, 1, 2, 3], 
     [ 5, 1000, 7, 8], 
     [ 10, 11, 12, 13], 
     [ 15, 16, 17, 18], 
     [ 20, 21, 22, 23]])