:과, numpy의 차이점

Oct 04 2020

일부 리소스는 numpy의 배열 슬라이싱 array[2,:,1]에서와 동일한 결과가 발생 한다고 언급 array[2][:][1]했지만이 경우 동일한 결과를 얻지 못합니다.

array3d = np.array([[[1, 2], [3, 4]],[[5, 6], [7, 8]], [[9, 10], [11, 12]]])
array3d[2,:,1]
out: array([10, 12])

과:

array3d[2][:][1]
out: array([11, 12])

차이점은 무엇입니까?

답변

3 hpaulj Oct 04 2020 at 15:54

일부 리소스 가 잘못되었습니다!

In [1]: array3d = np.array([[[1, 2], [3, 4]],[[5, 6], [7, 8]], [[9, 10], [11, 12
   ...: ]]])
In [2]: array3d
Out[2]: 
array([[[ 1,  2],
        [ 3,  4]],

       [[ 5,  6],
        [ 7,  8]],

       [[ 9, 10],
        [11, 12]]])

인덱스가 모두 스칼라이면 이런 종류의 분해가 작동합니다.

In [3]: array3d[2,0,1]
Out[3]: 10
In [4]: array3d[2][0][1]
Out[4]: 10

하나의 인덱스는 차원을 줄이고 하나의 '평면'을 선택합니다.

In [5]: array3d[2]
Out[5]: 
array([[ 9, 10],
       [11, 12]])

[:]그 자체로는 자리 표시자가 아닙니다. 다차원 인덱스 내에서 그것은 슬라이스입니다-그 차원의 모든 것. 목록에서도 동일한 동작을 볼 수 있습니다. alist[2]요소를 alist[:]반환하고 전체 목록의 복사본을 반환합니다.

In [6]: array3d[2][:]
Out[6]: 
array([[ 9, 10],
       [11, 12]])

numpy는 파이썬 패키지임을 기억하십시오 . Python 구문은 여전히 ​​모든 수준에서 적용됩니다. x[a][b][c]3 개의 인덱싱 작업을 순서대로 '체인화'합니다. x[a,b,c]인덱싱 작업 중 하나이며 튜플을에 전달합니다 x. 그 튜플을 해석하는 것은 numpy 코드입니다.

나머지 차원에 대해 다차원 인덱스를 사용해야합니다.

In [7]: array3d[2][:,1]
Out[7]: array([10, 12])
In [8]: array3d[2,:,1]
Out[8]: array([10, 12])

인터프리터는 실제로 다음을 수행합니다.

In [9]: array3d.__getitem__((2,slice(None),1))
Out[9]: array([10, 12])

In [11]: array3d.__getitem__(2).__getitem__((slice(None),1))
Out[11]: array([10, 12])