Python numpy 배열 기초 사용법 (1)

Python에서 과학적 계산을 수행하는 데 있어서 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]]

Leave a Comment