파이썬 (Python)/Numpy (array)

파이썬 numpy :: 2차원 배열(array) 인덱싱, 원소 값 수정방법

옐루비(YellowBee) 2023. 5. 19. 21:33

NumPy 2차원 배열에서 원소에 접근하고 인덱싱하는 다양한 방법을 소개하고자합니다.

1. 원소 접근

NumPy 2차원 배열의 각 원소에 접근하는 가장 간단한 방법은 인덱스를 사용하는 것입니다.

인덱스는 0부터 시작하며, 대괄호([]) 안에 인덱스를 지정하여 해당 위치의 원소에 접근할 수 있습니다

import numpy as np

arr = np.array([1, 2, 3],
			   [ 4, 5, 6],
               [7, 8, 9]])

# 특정 위치의 원소에 접근
print(arr[0, 0])  # 출력: 1
print(arr[1, 2])  # 출력: 6

위의 예시에서 'arr'은 3X3의 2차원 배열입니다. 

[i, j]와 같은 형태의 인덱스를 사용하여 특정 위치의 원소에 접근할 수 있습니다.

arr[0, 0]는 첫 번째 행, 첫 번째 열의 원소인 1을 출력합니다.

 

2. 슬라이싱

슬라이싱은 배열의 일부분을 추출하는 방법입니다.

시작 인덱스부터 끝 인덱스 이전까지의 원소를 선택하여 새로운 배열을 생성합니다.

슬라이싱은 콜론(:)을 사용하여 표현하며, [시작 인덱스:끝 인덱스]와 같은 형태로 사용됩니다.

import numpy as np

# 2차원 배열 생성
arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# 행 또는 열 단위로 접근
print(arr[1])     # 출력: [4 5 6]
print(arr[:, 1])  # 출력: [2 5 8]

# 특정 범위의 원소에 접근
print(arr[0:2, 1:3])
# 출력:
# [[2 3]
#  [5 6]]

: 만 있는 경우 모든 행이나 열에 접근하여 출력하게 되며, 특정 범위의 원소에 접근도 가능합니다.

arr[i]와 같은 형태의 인덱스를 사용하여 특정 행에 접근할 수 있습니다.

arr[1]은 두 번째 행인 [4, 5, 6]을 출력합니다.

또한, arr[:, j]와 같은 형태의 인덱스를 사용하여 특정 열에 접근할 수 있습니다.

arr[:, 1]은 두 번째 열인 [2, 5, 8]을 출력합니다.

arr[i:j, m:n]과 같은 형태의 인덱스를 사용하여 특정 범위의 원소에 접근할 수 있습니다.

arr[0:2, 1:3]은 첫 번째 행부터 두 번째 행과 두 번째 열부터 세 번째 열까지의 부분 배열을 출력합니다.

 

3. 부울 인덱싱

저번 1차원 배열의 접근에서도 소개했듯이 부울 인덱싱은 조건에 따라 배열의 원소를 선택하는 방법입니다.

부울 인덱싱은 조건을 만족하는 원소에 대해 부울(True/False) 값을 가지는 배열을 생성하여

이를 인덱스로 사용하여 해당 원소를 선택하는 방법입니다.

부울 인덱싱은 주어진 조건을 간단하게 표현하고, 배열의 원소 중에서 필요한 원소들을 선택하는 데에 매우 유용합니다.

import numpy as np

# 2차원 배열 생성
arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# 부울 인덱싱을 사용하여 조건을 만족하는 원소 선택
mask = arr > 5

print(mask)
# 출력:
# [[False False False]
# [False False  True]
# [ True  True  True]]

print(arr[mask])
# 출력: [6 7 8 9]

의 예시에서 mask는 arr의 원소가 5보다 큰지 여부를 나타내는 부울 배열입니다.

mask를 사용하여 arr에서 조건을 만족하는 원소를 선택할 수 있습니다.

arr[mask]는 mask의 값이 True인 위치의 원소만 선택하여 반환합니다. 따라서 출력 결과는 6, 7, 8, 9입니다.

부울 인덱싱을 사용하면 특정 조건을 만족하는 원소를 선택하여 다양한 작업을 수행할 수 있습니다.

예를 들어, 조건을 만족하는 원소를 수정하거나 다른 값으로 대체하는 등의 작업을 할 수 있습니다.

이를 통해 배열의 특정 요소를 유연하게 조작할 수 있습니다.

 

4. 원소 값 수정

NumPy 2차원 배열에서 원소 값을 수정하는 방법은 인덱싱을 활용하여 해당 위치의 값을 새로운 값으로 할당하는 것입니다.

import numpy as np

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

# 인덱스 2에 있는 원소 값을 수정
arr[0,1] = 10

print(arr)
# 출력: ([[1, 10, 3],
         [4, 5, 6],
         [7, 8, 9]])

소개한 다양한 방법들을 이용하여, NumPy 2차원 배열에서 원소에 접근하고 수정할 수 있습니다.

인덱싱과 슬라이싱은 배열의 일부분을 선택하고 추출하는 데에 매우 유용하며,

부울 인덱싱을 사용하면 조건에 따라 배열의 원소를 선택할 수 있습니다.