2015-12-12 137 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]])