A [1:3] [0:2]与A [1:3,0:2]之间的差异

时间:2014-03-10 19:24:51

标签: python numpy

我无法弄清楚这两种索引之间的区别。似乎他们应该产生相同的结果,但事实并非如此。有什么解释吗?

2 个答案:

答案 0 :(得分:7)

A[1:3, 0:2]获取行1-3和列0-2,从而返回2x2数组。

A[1:3][0:2]首先获取行1-3 ,并从此子数组中获取行0-2,从而生成2xn数组,其中n }是原始列数。

In [1]: import numpy as np

In [2]: a = np.arange(16).reshape(4,4)

In [3]: a
Out[3]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

In [4]: a[1:3,0:2]
Out[4]: 
array([[4, 5],
       [8, 9]])

In [5]: a[1:3]
Out[5]: 
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [6]: a[1:3][0:2]

Out[6]: 
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

使用两个A[1:3,0:2]的{​​{1}}相当于:[]

A[1:3][:,0:2]

In [7]: a[1:3][:,0:2] Out[7]: array([[4, 5], [8, 9]]) 表示“所有行”。因此,您首先通过:选择行,然后从所有行中选择列[1:3]

答案 1 :(得分:3)

A[1:3][0:2]表示首先在A上应用[1:3],然后对从第一步返回的数组应用[0:2],因此两个切片仅应用于行。 OTOH A[1:3, 0:2]表示在行上应用1:3,在列上应用0:2,即。只得到第二和第三行,只获得这些行的前两列。

>>> import numpy as np
>>> a = np.arange(12).reshape(3, 4)
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

>>> a[1:3][0:2]
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> a[1:3]                 #Get 2nd and 3rd row.
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> _[0:2]                 #Get the first two rows of the last array.
array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

>>> a[1:3, 0:2]
array([[4, 5],
       [8, 9]])
相关问题