Python에서 과학적 계산을 수행하는 데 있어서 NumPy는 빼놓을 수 없는 중요한 라이브러리입니다. NumPy는 대규모 다차원 배열과 행렬 연산에 필요한 다양한 함수를 제공하며, 이를 통해 높은 수준의 수학적 연산을 손쉽게 수행할 수 있습니다. 이번 포스트는 numpy 배열 기초에 대해서 설명합니다.
numpy 배열 기초 목차
기본 배열 연산 NumPy에서 배열을 다루는 기본적인 방법에는 여러 가지가 있습니다
배열 생성
np.array: 리스트나 튜플을 입력으로 받아 배열을 생성합니다.
import numpy as np # 리스트를 사용하여 NumPy 배열 생성 list_data = [1, 2, 3, 4, 5] array_from_list = np.array(list_data) # 튜플을 사용하여 NumPy 배열 생성 tuple_data = (6, 7, 8, 9, 10) array_from_tuple = np.array(tuple_data)
np.zeros: 주어진 모양의 새 배열을 생성하고, 모든 요소를 0으로 초기화합니다.
import numpy as np # 5개 요소를 가진 1차원 배열 생성 zero_array_1d = np.zeros(5) # 3x4 크기의 2차원 배열 생성 zero_array_2d = np.zeros((3, 4)) # 2x3x4 크기의 3차원 배열 생성 zero_array_3d = np.zeros((2, 3, 4))
np.ones: 주어진 모양의 새 배열을 생성하고, 모든 요소를 1로 초기화합니다.
import numpy as np # 5개 요소를 가진 1차원 배열 생성 ones_array_1d = np.ones(5) # 3x4 크기의 2차원 배열 생성 ones_array_2d = np.ones((3, 4)) # 2x3x4 크기의 3차원 배열 생성 ones_array_3d = np.ones((2, 3, 4))
np.arange: 연속적인 값을 가진 배열을 생성합니다.
import numpy as np # 0부터 9까지의 숫자를 포함하는 배열 생성 array_from_arange = np.arange(10) # 10부터 19까지의 숫자를 포함하는 배열 생성 array_from_arange_with_start_end = np.arange(10, 20) # 10부터 50까지 5씩 증가하는 숫자를 포함하는 배열 생성 array_from_arange_with_step = np.arange(10, 51, 5)
배열 속성
shape: 배열의 모양을 나타냅니다.
dtype: 배열에 저장된 데이터의 타입을 나타냅니다.
ndim: 배열의 차원을 나타냅니다.
import numpy as np # 1차원 배열 생성 array_1d = np.array([1, 2, 3, 4, 5]) # 배열의 모양, 데이터 타입, 차원 수 출력 print("Shape of 1D array:", array_1d.shape) # (5,) 배열은 5개의 요소를 가짐 print("Data type of array:", array_1d.dtype) # int64 print("Number of dimensions:", array_1d.ndim) # 1 # 2차원 배열 생성 array_2d = np.array([[1, 2, 3], [4, 5, 6]]) # 배열의 모양, 데이터 타입, 차원 수 출력 print("Shape of 2D array:", array_2d.shape) # (2, 3) 배열은 2개의 행과 3개의 열을 가짐 print("Data type of array:", array_2d.dtype) # int64 print("Number of dimensions:", array_2d.ndim) # 2 # 3차원 배열 생성 array_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) # 배열의 모양, 데이터 타입, 차원 수 출력 print("Shape of 3D array:", array_3d.shape) # (2, 2, 2) 배열은 2개의 블록, 각 블록은 2개의 행과 2개의 열을 가짐 print("Data type of array:", array_3d.dtype) # int64 print("Number of dimensions:", array_3d.ndim) # 3
산술 연산
배열에 대한 기본적인 산술 연산(+, -, *, /)은 요소별로 수행됩니다.
import numpy as np # 배열 생성 array_a = np.array([1, 2, 3, 4]) array_b = np.array([10, 20, 30, 40]) # 요소별 산술 연산 addition = array_a + array_b # 배열 요소별로 더하기 print("Addition:", addition) # [11 22 33 44] subtraction = array_b - array_a # 배열 요소별로 빼기 print("Subtraction:", subtraction) # [9 18 27 36] multiplication = array_a * array_b # 배열 요소별로 곱하기 print("Multiplication:", multiplication) # [10 40 90 160] division = array_b / array_a # 배열 요소별로 나누기 print("Division:", division) # [10. 10. 10. 10.]
인덱싱 슬라이싱
인덱싱과 슬라이싱을 통해 배열의 특정 부분에 접근하거나, 배열의 일부를 추출할 수 있습니다.
import numpy as np # 2차원 배열 생성 array_2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 인덱싱: 특정 요소 접근 specific_element = array_2d[1, 1] # 두 번째 행, 두 번째 열의 요소 print("Specific element:", specific_element) # 5 # 슬라이싱: 행과 열의 부분 집합 접근 row_slice = array_2d[1, :] # 두 번째 행 전체 print("Row slice:", row_slice) # [4 5 6] column_slice = array_2d[:, 2] # 세 번째 열 전체 print("Column slice:", column_slice) # [3 6 9] subarray_slice = array_2d[0:2, 1:3] # 첫 두 행과 두 번째와 세 번째 열 사이의 부분 배열 print("Subarray slice:", subarray_slice) # [[2 3] # [5 6]]