Python - [Numpy] NdArray 살펴보기 (NumPy의 핵심 데이터 구조)

컴퓨터/Python

728x90
반응형

서론

NumPy는 효과적으로 Python에서 데이터를 효과적으로 다룰 수 있게 해 주는 라이브러리입니다.

다시 말해서, 데이터를 효과적으로 다룰 수 있는 데이터 구조를 가지고 있습니다.

 

본문은 NumPy에서 데이터를 효과적으로 다룰 수 있도록 만든 NumPy의 데이터구조 NdArray가 어떻게 생겨먹었는지 알아보고, 이해하는 시간을 가져보도록 합시다. 

 

NdArray의 주요 특징들을 이해한다면 NumPy를 이용하여 데이터를 다루는데 조금 더 쉽게 익숙해질 수 있습니다.

 

N차원 배열 NdArray

NumPy에서 제공하는 데이터 구조입니다. N차원의 배열의 형태로 자료를 표현하기 때문에 NdArray라고 부릅니다.

즉 NdArray는 어떠한 데이터를 N차원의 데이터로 표현하고 있습니다.

 

그리고, 이 NdArray의 대표적인 특징(속성)은 다음과 같습니다.

 

  • 차원(Dimensionality) : 1차원부터 N개의 차원까지 다양한 차원으로 구성할 수 있다.
  • 크기(Size) : 크기는 각 차원의 원소의 개수로 정의된다.
  • 자료형(dtype) : 원소는 모두 동일한 자료형을 가진다.
  • 인덱싱(Indexing): 인덱스를 사용하여 NdArray의 원소에 접근할 수 있다.
  • 슬라이싱(Slicing): 슬라이싱을 사용하여 NdArray의 일부분을 추출할 수 있다.
  • 벡터화(Vectorization) : 벡터화 연산을 지원하여 반복문 없이 배열의 모든 원소에 대한 연산을 수행할 수 있다.
  • 브로드캐스팅(Broadcasting) :  차원의 크기가 다른 NdArray 간에도 연산이 가능하다. 

이러한 특징들 때문에 벡터화 빠르고 간편한 수학적인 연산을 가능하게 합니다.

어떻게 간편한 수학적인 연산을 하고있는지 간단한 예제 몇 개로 알아보도록 합시다.

예제 1 -  정수 곱하기 (List vs NdArray)

만약 1,2,3,4,5의 5개 원소를 가진 List와 NdArray에 모든 원소에 곱하기 2를 하고 싶다. 

import numpy as np


# Python List
list = [1,2,3,4,5]

#아래 코드 실행 시 의도한대로 나오지 않음.
print(list * 2) #[1,2,3,4,5,1,2,3,4,5]

#For문을 통해 가능하다.
for i in range(len(list)):
    list[i] = list[i] * 2
print(list) #[2,4,6,8,10]


# NumPy NdArray
ndarray = np.array([1,2,3,4,5])

#간단하게 연산이 가능하다.
ndarray = ndarray * 2
print(ndarray) # [2,4,6,8,10]

list를 사용하면 for문을 이용해야 원하는 결과를 얻을 수 있습니다. 하지만 Numpy를 사용하면 아주 손쉽게 계산이 가능합니다. 

 

예제 2 -  배열과 배열 계산 (List vs NdArray)

만약 2개의 배열 [1,2,3,4,5] 와 [10,20,30,40,50]의 값을 더하여 새로운 배열을 List와 NdArray로 만들어보세요.

# Python List
list_A = [1,2,3,4,5]
list_B = [10,20,30,40,50]
list_C = list_A + list_B
#아래 코드 실행 시 의도한대로 나오지 않음.
print(list_C) #[1, 2, 3, 4, 5, 10, 20, 30, 40, 50]

list_C = []
#For문을 통해 가능하다.
for i in range(len(list_A)):
    list_C.append(list_A[i] + list_B[i])
print(list_C) #[11, 22, 33, 44, 55]


# NumPy NdArray
ndarray_A = np.array([1,2,3,4,5])
ndarray_B = np.array([10,20,30,40,50])
#간단하게 연산이 가능하다.
ndarray_C = ndarray_A + ndarray_B
print(ndarray_C) # [11 22 33 44 55]

예제 1과 유사하게 배열과 배열끼리의 연산또한 아주 쉽습니다.

 

예제 3 -  연속적인 계산 (List vs NdArray)

예제 1과 예제 2만 보고는 편리함을 못 느낄 수 있을 것 같아 다음과 같은 예제를 한번 풀어보도록 합시다.

이번 예제는 NdArray로만 작성하겠습니다. (직접 list로 구현해 보고 차이점을 느껴보세요.)

 

2개의 배열 [1,2,3]과 [4,5,6]이 있습니다.

두 배열을 더하고 뺀 결과 배열 두개를 만듭니다.

만들어진 배열 2개를 이용해서 곱하기와 나누기를 하여 새로운 2개의 배열을 만듭니다.

import numpy as np

# NdArray 생성
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 사칙연산 수행
c = a + b  # 덧셈
d = a - b  # 뺄셈

# 다시 연산
e = c * d  # c와 d를 곱셈하여 새로운 NdArray 생성
f = e / d  # e와 d를 나눗셈하여 새로운 NdArray 생성

print(e)  # 출력: [-15 -28 -45]
print(f)  # 출력: [-5. -5. -5.]

 

직접 list를 이용해서 예제의 결과를 구해보고 차이점을 느껴보세요.

 

이렇게 강력하고 편리한 NumPy 알아두면 도움이 될까요? 안될까요?

728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :