当前位置: 代码迷 >> python >> A [1:3] [0:2]与A [1:3,0:2]之间的差异
  详细解决方案

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

热度:82   发布时间:2023-06-20 19:23:29.0

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

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]是: A[1:3][:,0:2]

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

其中:表示“所有行”。 因此,您首先通过[1:3]选择行,然后从所有行中选择列0-2

A[1:3][0:2]表示首先在A上应用[1:3] ,然后对从第一步返回的数组应用[0:2] ,因此两个切片仅应用于行。 OTOH A[1:3, 0:2] 3,0 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]])
  相关解决方案