NumPy 를 파이썬을 이용하여 공부한다면 아래의 링크에서 공부 가능합니다.
NumPy quickstart
그리고 데이터 사이언스 스쿨의 넘파이 배열 프로그래밍에 설명이 잘 되어 있습니다.
NumPy(넘파이) 개념
NumPy는 파이썬에서 벡터, 행령과 같은 행렬의 수치 연산을 수행하는 선형 대수 라이브러리 입니다.
특징은, 내부적으로 C로 구현되어 있어서 연산속도가 빠릅니다.
NumPy(넘파이) 사용 목적
그런데 왜 쓰느냐?
우리는 대량의 데이터를 만지는 작업을 합니다. 그래서 대량의 데이터를 빠르게 조작하기 위해서는 필수입니다.
배열을 생성하고 다룰 줄 알아야 하는데 넘파이 라이브러리를 사용하여 배열을 생성하고 기술 통계를 낼 수 있으며, 난수를 발생하고 그 결과를 분석하는데 유용합니다.
NumPy(넘파이) 사용 방법
기본적으로 아래와 같이 시작합니다.
import numpy as np
numpy 라이브러리를 가져와 np 라는 이름으로 사용하겠다는 것입니다.
as 의 의미는 별칭으로 np로 사용하겠다는 것입니다.
알아야 할 기초
넘파이에서 오브젝트는 동차 다차원 배열이라고 하는데 ... 그냥 다차원 배열이라고 생각하셔도 될 거 같습니다.
모든 배열의 값이 기본적으로 같은 타입이어야합니다. 그리고 각 차원을 축으로 표현합니다.
3차원일 때 하나의 축을 가지고 3개의 요소들을 가지고 있는 것을 표현한다면 아래와 같습니다.
[1,2,1]
그래서 해당 길이는 3이 됩니다.
하나가 아닌 2개의 축을 아래와 가지고 있다고 가정합니다.
[[ 1, 0, 0], [ 0, 1, 2]]
첫 번재 축의 길이는 2이고 2번째 축의 길이는 3이 됩니다.
NumPy로 배열 만들기
list = [[1,2,3],[4,5,6],[7,8,9]]
np.array(list)
array([[1,2,3],[4,5,6],[7,8,9])
넘파이로 1차원 배열 만들기
넘파이의 array 함수에 리스트를 넣게되면 ndaaray 클래스 객체인 배열로 변환해줍니다.
import numpy as np
ar = np.array([0,1,2,3,4,5,6,7,8,9])
ar
[결과]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
해당 부분의 타입을 보면 아래와 같이 나옵니다.
import numpy as np
ar = np.array([0,1,2,3,4,5,6,7,8,9])
type(ar)
[결과]
numpy.ndarray
벡터화 연산하기(vectorized operation)
배열의 각 원소에 대한 반복 연산을 하나의 명령어로 처리하는 백터화 연산을 지원합니다.
배열의 데이터를 모두 2배 또는 특정 배수만큼 증가해야하는 경우를 살펴보겠습니다.
data1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
newData = []
for item in data1:
newData.append(2 * item)
newData
[결과]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
새로운 빈 배열을 만들어서 원래 배열이 가지고 있는 데이터의 값을 두 배로 하여 넣습니다.
하지만 벡터화 연산을 사용하게 되면 for 문과 같은 반복문 없이 가능합니다.
data2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x = np.array(data2)
x
[결과]
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
위와 같은 결과에 원하는 배수만큼 숫자만 변경하면 됩니다.
x * 2
[결과]
array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18])
x * 4
[결과]
array([ 0, 4, 8, 12, 16, 20, 24, 28, 32, 36])
만약 data1 의 배열에서 위와 같이 원하는 배수만큼 넣게 된다면...?
data1 * 2
[결과]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
위와 같이 크키가 두배로 늘어나게 됩니다.
응용하기 (비교연산 및 논리연산에 적용)
벡터화 연산은 비교연산 및 논리연산에도 적용이 됩니다.
넘파이를 이용하여 두 배열을 생성합니다.
a = np.array([11, 22, 33])
b = np.array([1, 2, 3])
[결과]
array([11, 22, 33])
array([1, 2, 3])
여기서 연산자를 사용하여 값을 변경할 수 있습니다.
2 * a + b
[결과]
array([23, 46, 69])
뿐만 아니라, 비교연산을 이용하여 참 또는 거짓 값을 나타낼 수 있습니다.
a == 11
[결과]
array([ True, False, False])
(a == 22) & ( b > 2)
[결과]
array([False, False, False])
(a == 22) & ( b > 1)
[결과]
array([False, True, False])