NEVERTHELESS

[Python] 넘파이 맛보기

by Ungbae

 

 

 

 

본 게시글은 학부 수업 '컴퓨터 프로그래밍 1'과 수업 교재 '파워 유저를 위한 파이썬 Express' 를 토대로 이해한 내용을 정리하였습니다.

 

 

 

 

 

 

num파이?

 

 

컴퓨터 과학의 길을 걷기 시작하면서, 고등학교 이후로 등한시 했던 수학에 다시 흥미를 가지게 되었다. 요즘 고등 교육과정에는 행렬이 빠졌다고 하는데... 다행히 라떼 시절에는 선택과목이 아니었던 시절. 그 덕에 미적분학과 선형대수는 나에게 다행히 친숙하다. 하지만 이 추상적이기만한 이 수학과목을 도대체 어디에 쓸고... 늘 궁금했던 찰나. 나는 드디어 그 궁금증의 답을 여기 머신러닝에서 찾았다. 머신러닝의 주요 알고리즘인 선형대수와 통계학.

그 선형대수를 코딩에 접목하기 위해서는 넘파이를 알아야 했다.

 

 

넘파이 또한 컴퓨터 과학에서는 꽤 오래된 근본있는 친구다. 그러기에 매우 방대한 기능을 지원하고 있다. 이걸 한 번에 다 완벽히 숙달으르 하는 것은 상당한 시간과 경험이 필요하기에 오히려 노베이스가 각잡고 다 배우겠다고 하는 것은 비효율적. 비교적 간단히 맛보고 사용법을 익힌 다음 실제 실무에 뛰어들었을 때 본격적으로 사용하면서 실력을 늘리는게 더 낫다고 한다.

 


 

 

넘파이

 

 

Numerical Python을 의미하는 NumPy

파이썬에서 선형대수 기반의 프로그램을 만들 수 있도록 도와주는 고마운 패키지

루프를 사용하지 않고도 데이터의 배열 연산을 가능하게 한다.

 

이 말로는 아직 와닿지 않는다... 그냥 선형대수를 코딩으로 할 수 있게 한다는 것

 

 

 

 

넘파이란?

  • 넘파이(NumPy)는 행렬(Matrix) 계산을 위한 파이썬 라이브러리 모듈이다.
  • 처리 속도가 중요한 인공지능이나 데이터 과학에서는 파이썬의 리스트 대신에 넘파이를 선호한다.
  • scikit-learn이나 tensorflow 패키지도 모두 넘파이 위에서 작동

 

 

 

 

 

 

리스트보다 넘파이의 배열이 훨씬 빠르다

 

  • 리스트는 여러 개의 값들을 저장할 수 있는 자료구조로서 강력하고 활용도가 높다.
  • 리스트는 다양한 자료형의 데이터를 여러 개 저장할 수 있으며 데이터를 변경하거나 추가, 제거할 수 있다.
# 리스트의 예시
scores = [10, 20, 30, 40, 50, 60]

 

  • 데이터를 처리할 때는 리스트와 리스트 간의 다양한 연산이 필요
  • 파이썬 기본 리스트는 이러한 기능이 부족하며 연산 속도도 빠르지 않다.
  • 데이터 과학자들은 기본 리스트 대신 Numpy를 선호

 


 

Python List vs NumPy

그림에서 볼 수 있듯이 리스트에서는 데이터가 흩어져 있어서 다음 데이터를 찾기 어렵다.

데이터가 연속적인 공간에 있어야 다음 데이털르 찾기가 쉽다.

 

물론 더 깊은 전공의 영역으로 가면 C++의 포인터 등을 활용한 연결리스트나 트리가 있지만 그건 다른 게시물을 참고할 것

 

 

 

우선 넘파이를 써먹기 위해서 아래 코드처럼 넘파이를 불러오자

 

import numpy as np

넘파이 배열

 

import numpy as np

# 우리가 화씨 온도로 저장된 미국 도시의 기온 정보를 얻었다고 가정하자

ftemp = [63, 73, 80, 86, 84, 78, 66, 45, 54, 63]

 

이 리스트를 넘파이의 배열로 변환하려면 아래의 코드와 같이 넘파이 모듈의 array() 함수를 호출하면 된다.

 

F = np.array(ftemp)

# 출력 결과
# array([63, 73, 80, 86, 84, 78, 66, 45, 54, 63])

 

 

 

 

배열 간 연산

 

+ 연산자나 * 연산자와 같은 수학적인 연산자를 얼마든지 적용할 수 있다.

import numpy as np

A = np.array([1, 2, 3, 4])
B = np.array([5, 6, 7, 8])
result = A + B	# 넘파이 배열에 + 연산이 적용된다.

# 출력 결과
# array([6, 8, 10, 12])

 

 

+ 외에도 모든 연산자가 가능하다.

a = np.array([0, 9, 21, 3])
a < 10

# 출력 결과
# array([True, True, False, True])

 

 

 

 

 

2차원 배열

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

# 출력 결과
array([[1,2,3],
	[4,5,6],
	[7,8,9]])

b[0][2]

# 출력 결과
3

3이 출력되는 원리

 

 

블로그의 정보

그럼에도 불구하고

Ungbae

활동하기