파이썬에서 튜플로 인덱싱하는 방법
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