logo

파이썬에서 튜플로 인덱싱하는 방법 📂프로그래밍

파이썬에서 튜플로 인덱싱하는 방법

2차원 배열

$A$를 2차원 배열이라고 하자. 그러면 $A[(y,x)]$와 $A[y,x]$는 같은 기능을 한다.

>>> import numpy as np
>>> A = np.arange(16).reshape(4,4)

>>> A
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

>>> A[2,3]
11
>>> A[(2,3)]
11
>>>

튜플의 튜플을 쓰면 특정한 여러 인덱스를 참조할 수 있다. 여기에서 주의해야할 점은 튜플안의 첫번째 튜플은 행(첫번째 차원)에 대한 인덱스이고, 두번째 튜플은 열(두번째 차원)에 대한 인덱스이다. 따라서 배열의 [0,0], [1,1], [2,2] 자리에 각각 1, 2, 3을 대입하고 싶으면, A[(0,0), (1,1), (2,2)] = [1, 2, 3]이 아니라 A[(0, 1, 2), (0, 1, 2)] = [1, 2, 3]으로 입력해야한다.

>>> A = np.zeros((3,3))
>>> A
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

>>> A[(0,0), (1,1), (2,2)] = [1, 2, 3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: too many indices for array: array is 2-dimensional, but 3 were indexed

>>> A[(0, 1, 2), (0, 1, 2)] = [1, 2, 3]
>>> A
array([[1., 0., 0.],
       [0., 2., 0.],
       [0., 0., 3.]])

다차원 배열

예를 들어 다차원 배열에서, 각각의 2차원 배열의 [0,0], [1,2], [2,3]를 참조하고 싶다면 다음과 같이 입력하면 된다.

>>> A = np.zeros((3,4,4))
>>> A
array([[[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]],

       [[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]]])

>>> A[:, (0, 1, 2), (0, 2, 3)] = [1, 3, 9]
>>> A
array([[[1., 0., 0., 0.],
        [0., 0., 3., 0.],
        [0., 0., 0., 9.],
        [0., 0., 0., 0.]],

       [[1., 0., 0., 0.],
        [0., 0., 3., 0.],
        [0., 0., 0., 9.],
        [0., 0., 0., 0.]],

       [[1., 0., 0., 0.],
        [0., 0., 3., 0.],
        [0., 0., 0., 9.],
        [0., 0., 0., 0.]]])

환경

  • OS: Windows10
  • Python 3.9.2, Numpy 1.19.5