본문 바로가기
Python

파이썬 numpy를 이용한 다차원 배열의 활용

by 노마드 산코디 2023. 10. 6.
728x90

안녕하세요. 오늘은 파이썬 numpy에 대한 내용을 주제로 포스팅하려고 합니다. numpy는 파이썬의 핵심 라이브러리 중 하나로, 고성능 수치 계산을 위한 다차원 배열을 다루는 도구입니다. 데이터 과학, 머신 러닝, 공학, 과학 연구 등 다양한 분야에서 널리 사용되며, 파이썬을 데이터 분석 및 수학적 연산에 활용할 때 핵심 역할을 합니다. 이 포스팅에서는 numpy의 기초부터 활용까지 다양한 내용을 다뤄보도록 하겠습니다.

 

 




1. numpy란?

NumPy(넘파이)는 "Numerical Python"의 줄임말로, 파이썬의 핵심 라이브러리 중 하나로 과학적 계산과 데이터 분석을 위한 다차원 배열을 다루는 패키지입니다. NumPy는 파이썬의 기본 자료형과 내장 함수로는 제공하지 않는 다차원 배열(ndarray)을 제공하며, 이를 활용하여 고성능 수치 계산을 수행할 수 있습니다. NumPy는 빠르고 메모리 효율적인 배열 연산을 지원하며, 데이터 처리, 변환, 필터링, 통계 분석, 시각화 등 다양한 수학 및 과학 연산에 사용됩니다.



1. 다차원 배열 (ndarray)
NumPy의 핵심 데이터 구조인 다차원 배열은 동일한 데이터 타입의 요소로 구성된 n-차원 배열을 나타냅니다. 이를 통해 효율적인 데이터 저장 및 연산이 가능합니다.

2. 브로드캐스팅 (Broadcasting)
NumPy는 다른 모양(shape)의 배열 간에도 연산이 가능하게 하는 브로드캐스팅 기능을 제공합니다.

3. 효율적인 연산
NumPy는 C로 구현되어 있어 고속의 배열 연산을 지원하며, 내부적으로 메모리 관리 및 데이터 뷰 처리를 최적화합니다.

4. 풍부한 수학 및 통계 함수
NumPy는 다양한 수학 및 통계 함수를 제공하여 데이터 분석 및 처리 작업을 간편하게 수행할 수 있습니다.

5. 파일 입출력
NumPy는 배열을 파일로 저장하고 파일에서 배열을 읽어올 수 있는 기능을 제공합니다.

6. 다양한 오픈 소스 라이브러리와 통합
NumPy는 데이터 과학 및 공학 분야의 다른 라이브러리와 통합하여 사용할 수 있습니다. 예를 들어, SciPy, scikit-learn, pandas, Matplotlib 등 다양한 라이브러리와 호환성이 높습니다.



NumPy는 데이터 분석, 과학 연구, 기계 학습, 이미지 처리, 신호 처리, 통계 분석 등 다양한 분야에서 필수적인 도구로 사용되며, 파이썬 생태계에서 핵심 역할을 하고 있습니다.







2. numpy 배열 생성과 초기화

NumPy 배열은 numpy 라이브러리를 임포트하고, 해당 라이브러리의 함수와 메서드를 사용하여 생성 및 초기화할 수 있습니다.


1. 리스트나 튜플로부터 배열 생성

import numpy as np

list_data = [1, 2, 3, 4, 5]
array_from_list = np.array(list_data)

tuple_data = (1, 2, 3, 4, 5)
array_from_tuple = np.array(tuple_data)




2. 0 또는 1로 초기화된 배열 생성

import numpy as np

zeros_array = np.zeros(5)  # 0으로 초기화된 크기가 5인 배열
ones_array = np.ones(5)    # 1로 초기화된 크기가 5인 배열




3. 특정 값으로 초기화된 배열 생성

import numpy as np

constant_array = np.full(5, 7)  # 7로 초기화된 크기가 5인 배열




4. 범위를 가지는 배열 생성

import numpy as np

range_array = np.arange(1, 10, 2)  # 1부터 10 미만까지 2씩 증가하는 배열 [1, 3, 5, 7, 9]




5. 균등 간격의 배열 생성

import numpy as np

linspace_array = np.linspace(0, 1, 5)  # 0부터 1까지 5개의 균일한 간격으로 배열 생성 [0.  0.25  0.5  0.75  1.]




6. 난수로 초기화된 배열 생성

import numpy as np

random_array = np.random.rand(5)  # 0과 1 사이의 난수로 초기화된 크기가 5인 배열




7. 단위 행렬 생성

import numpy as np

identity_matrix = np.eye(3)  # 3x3 크기의 단위 행렬 생성




8. 배열의 크기 및 모양 변경

import numpy as np

original_array = np.array([1, 2, 3, 4, 5])
reshaped_array = original_array.reshape(2, 3)  # 크기가 2x3인 배열로 변경




위의 방법들을 활용하여 다양한 형태와 초기값을 가지는 NumPy 배열을 생성하고 초기화할 수 있습니다. NumPy는 이러한 다양한 초기화 방법을 제공하여 데이터 처리 및 분석을 용이하게 합니다.








3. numpy 배열의 기본 속성

파이썬 NumPy 배열의 기본 속성에 대해 정리하겠습니다. NumPy 배열은 데이터를 저장하고 다루는 데 필요한 다양한 정보를 속성으로 가지고 있습니다.



1. shape 속성
shape 속성은 배열의 차원과 각 차원의 크기를 나타내는 튜플입니다. 예를 들어, (3, 4) 크기의 배열은 3개의 행과 4개의 열로 이루어진 2차원 배열을 의미합니다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.shape)  # 출력: (2, 3) (2개의 행과 3개의 열)




2. ndim 속성
ndim 속성은 배열의 차원 수를 나타냅니다. 예를 들어, 2차원 배열은 ndim이 2입니다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim)  # 출력: 2 (2차원 배열)




3. size 속성
size 속성은 배열의 전체 요소 수를 나타냅니다.

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.size)  # 출력: 6 (총 6개의 요소)




4. dtype 속성
dtype 속성은 배열의 데이터 타입을 나타냅니다. 예를 들어, 정수형 배열은 int64 데이터 타입을 갖습니다.

import numpy as np

arr = np.array([1, 2, 3])
print(arr.dtype)  # 출력: int64 (정수형)




5. itemsize 속성
itemsize 속성은 배열의 각 요소의 바이트 크기를 나타냅니다.

import numpy as np

arr = np.array([1, 2, 3])
print(arr.itemsize)  # 출력: 8 (int64 데이터 타입은 8바이트)




이러한 배열 속성은 NumPy 배열의 모양, 크기, 데이터 타입 등을 확인하고 배열 연산 및 처리를 수행하는 데 도움이 됩니다.








4. numpy를 이용한 배열 연산

NumPy는 배열 간 및 배열 내부의 다양한 연산을 지원하므로, 데이터 처리 및 수치 계산을 효율적으로 수행할 수 있습니다.



1. 요소별 연산 (Element-wise Operations)
NumPy 배열 간의 요소별 연산은 기본적으로 동일한 위치에 있는 요소끼리 수행됩니다.

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 덧셈
result_add = arr1 + arr2  # [5, 7, 9]

# 뺄셈
result_subtract = arr1 - arr2  # [-3, -3, -3]

# 곱셈
result_multiply = arr1 * arr2  # [4, 10, 18]

# 나눗셈
result_divide = arr1 / arr2  # [0.25, 0.4, 0.5]




2. 스칼라 연산 (Scalar Operations)
스칼라 연산은 배열에 스칼라 값을 더하거나 곱하는 등의 연산을 의미합니다.

import numpy as np

arr = np.array([1, 2, 3])

# 스칼라 덧셈
result_add_scalar = arr + 5  # [6, 7, 8]

# 스칼라 곱셈
result_multiply_scalar = arr * 2  # [2, 4, 6]




3. 비교 연산 (Comparison Operations)
배열 간의 비교 연산은 불리언 배열을 반환합니다.

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([2, 2, 2])

# 요소별 비교 (크기 비교)
result_comparison = arr1 > arr2  # [False, False, True]




4. 집계 함수 (Aggregation Functions)
NumPy는 배열 내 요소들을 집계하는 다양한 함수를 제공합니다.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 합계
sum_result = np.sum(arr)  # 15

# 평균
mean_result = np.mean(arr)  # 3.0

# 최댓값
max_result = np.max(arr)  # 5

# 최솟값
min_result = np.min(arr)  # 1




5. 행렬 연산 (Matrix Operations)
NumPy는 행렬 곱셈, 전치 행렬, 행렬식 등과 같은 선형 대수 연산도 지원합니다.

import numpy as np

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

# 행렬 곱셈
result_matrix_multiply = np.dot(matrix1, matrix2)

# 전치 행렬
result_transpose = matrix1.T

# 행렬식
determinant = np.linalg.det(matrix1)




NumPy의 다양한 함수와 연산자를 활용하여 배열 연산을 수행하면, 수치 계산과 데이터 분석 작업을 효율적으로 수행할 수 있습니다.








5. numpy의 인덱싱과 슬라이싱

배열의 특정 요소를 선택하거나 부분 배열을 추출하는 데 사용됩니다.



1. 인덱싱 (Indexing)
인덱싱은 배열 내의 특정 요소에 접근하는 방법입니다. NumPy 배열은 0부터 시작하는 인덱스를 사용합니다.

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

# 특정 인덱스의 요소에 접근
element = arr[2]  # 3 (인덱스 2의 요소)

# 음수 인덱스를 사용하여 끝에서부터 접근
last_element = arr[-1]  # 5 (마지막 요소)




2. 슬라이싱 (Slicing)
슬라이싱은 배열 내에서 부분 배열을 추출하는 방법입니다. 시작 인덱스부터 끝 인덱스 전까지의 요소를 선택합니다.

import numpy as np

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

# 인덱스 2부터 5까지의 부분 배열
subset = arr[2:6]  # [3, 4, 5, 6]

# 처음부터 인덱스 4까지의 부분 배열
subset = arr[:5]  # [1, 2, 3, 4, 5]

# 인덱스 3부터 끝까지의 부분 배열
subset = arr[3:]  # [4, 5, 6, 7, 8, 9]

# 음수 인덱스를 사용하여 끝에서부터 슬라이싱
subset = arr[-3:]  # [7, 8, 9]

# 스텝(간격)을 지정하여 슬라이싱
subset = arr[1:7:2]  # [2, 4, 6] (1부터 6까지, 간격 2로 슬라이싱)




3. 다차원 배열 인덱싱 및 슬라이싱
다차원 배열의 경우 각 차원에 대해 인덱싱과 슬라이싱을 적용할 수 있습니다.

import numpy as np

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

# 특정 위치의 요소에 접근
element = matrix[1, 2]  # 6 (2행 3열의 요소)

# 행 슬라이싱
row_slice = matrix[1, :]  # [4, 5, 6] (1행 전체)

# 열 슬라이싱
column_slice = matrix[:, 2]  # [3, 6, 9] (3열 전체)




다차원 배열에서도 마찬가지로 슬라이싱 및 인덱싱을 사용하여 필요한 부분을 선택할 수 있습니다.








최종 정리

오늘은 파이썬 NumPy에 대한 기본적인 내용을 주제로 정리해 보았습니다. NumPy는 다차원 배열을 다루는 강력한 라이브러리로, 데이터 과학, 수치 계산, 과학 연구, 기계 학습 등 다양한 분야에서 활용되며, 배열 생성, 인덱싱, 슬라이싱, 배열 연산 등 다양한 기능을 제공합니다. NumPy를 활용하면 데이터 처리와 분석 작업을 효율적으로 수행할 수 있으며, 데이터 과학 프로젝트에서 핵심 역할을 합니다. 파이썬 생태계에서 데이터 관련 작업을 수행하는 데 필수적인 라이브러리 중 하나로, 데이터를 다루고 조작하는 데 필수적인 도구입니다.

감사합니다.

728x90
반응형