[python] Numpy - 배열 생성, 연산, 난수 생성 및 변형 방법

혜진·2024년 8월 14일

Python

목록 보기
13/16
post-thumbnail

Numpy를 활용한 배열 생성, 연산, 난수 생성 및 변형 방법

1. Numpy 기본 함수

📑 배열 생성 및 구조 확인

import numpy as np

# 1차원 배열 생성
arr = np.arange(15)  # 0~14까지의 숫자를 1차원 배열로 생성
print(arr)

# 2차원 배열로 변환
arr_2d = arr.reshape(3, 5)  # 3행 5열의 2차원 배열로 변환
print(arr_2d)

# 배열 정보 출력
print("자료형:", arr_2d.dtype)  # 배열 요소의 자료형
print("배열 구조:", arr_2d.shape)  # 배열의 행열 구조
print("차원:", arr_2d.ndim)  # 배열의 차원
print("요소 바이트 크기:", arr_2d.itemsize)  # 각 요소의 바이트 크기
print("요소 개수:", arr_2d.size)  # 배열의 요소 개수

📑 배열 초기화 및 단위 행렬 생성

# 0으로 초기화된 배열 생성
zeros_arr = np.zeros((3, 4))  # 3행 4열의 0으로 초기화된 배열 생성
print(zeros_arr)

# 1로 초기화된 배열 생성
ones_arr = np.ones((2, 3), dtype=int)  # 2행 3열의 1로 초기화된 정수형 배열 생성
print(ones_arr)

# 단위 행렬 생성
identity_matrix = np.eye(5)  # 5x5 단위 행렬 생성
print(identity_matrix)

# 균등 분할된 배열 생성
linspace_arr = np.linspace(0, 2, 9)  # 0에서 2까지 9개의 값을 균등 분할하여 생성
print(linspace_arr)

2. Numpy 배열 연산

📑 1차원 배열 연산

a = np.array([20, 30, 40, 50])
b = np.arange(4)  # [0, 1, 2, 3]

# 배열 간 연산
print(a - b)  # [20, 29, 38, 47]
print(a + b)  # [20, 31, 42, 53]
print(a * b)  # [0, 30, 80, 150]
print(b ** 2)  # [0, 1, 4, 9]

# 비교 연산
print(a < 35)  # [True, True, False, False]

📑 2차원 배열 연산

a = np.array([[1, 1], [0, 1]])
b = np.array([[2, 0], [3, 4]])

# 요소 간 연산
print(a + b)  # [[3, 1], [3, 5]]
print(a - b)  # [[-1, 1], [-3, -3]]
print(a * b)  # [[2, 0], [0, 4]]

# 행렬 곱셈
c = a.dot(b)
print(c)  # [[5, 4], [3, 4]]

3. 난수 생성 및 통계 함수

📑 난수 생성

# 난수 발생기
rng = np.random.default_rng(1)  # seed 값을 설정하여 난수 생성기 초기화
random_arr = rng.random((2, 3))  # 2행 3열의 난수 배열 생성
print(random_arr)

# 정수형 난수 배열 생성
int_random_arr = np.random.randint(0, 10, (2, 3))  # 0~9 사이의 정수 난수 배열 생성
print(int_random_arr)

📑 통계 함수

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

# 합계, 최소값, 최대값
print(arr.sum())  # 전체 합계
print(arr.min())  # 전체 최소값
print(arr.max())  # 전체 최대값

# 행 또는 열 기준 연산
print(arr.sum(axis=0))  # 각 열의 합계
print(arr.min(axis=1))  # 각 행의 최소값
print(arr.cumsum(axis=0))  # 각 열의 누적합계

4. 배열 변형 및 병합

📑 배열의 형태 변형

# 1차원 배열로 변형
flattened_arr = arr.ravel()
print(flattened_arr)

# 배열 크기 변경
arr.resize((6, 6))  # 기존 배열의 크기를 6x6으로 변경
print(arr)

📑 배열 병합 및 분할

# 배열 병합
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])

vertical_stack = np.vstack((arr1, arr2))  # 행 기준 병합
horizontal_stack = np.hstack((arr1, arr2))  # 열 기준 병합
print(vertical_stack)
print(horizontal_stack)

# 배열 분할
split_arr = np.hsplit(horizontal_stack, 2)  # 열 기준 분할
print(split_arr)

split_arr = np.vsplit(vertical_stack, 2)  # 행 기준 분할
print(split_arr)

0개의 댓글