수복의 프로그래밍 여행기

NumPy 를 파이썬을 이용하여 공부한다면 아래의 링크에서 공부 가능합니다.

NumPy quickstart

 

NumPy quickstart — NumPy v1.22.dev0 Manual

NumPy provides familiar mathematical functions such as sin, cos, and exp. In NumPy, these are called “universal functions” (ufunc). Within NumPy, these functions operate elementwise on an array, producing an array as output. See also all, any, apply_al

numpy.org

 

그리고 데이터 사이언스 스쿨의 넘파이 배열 프로그래밍에 설명이 잘 되어 있습니다.

 

데이터 사이언스 스쿨 넘파이 배열 프로그래밍

 

3장 넘파이 배열 프로그래밍 — 데이터 사이언스 스쿨

.ipynb .pdf to have style consistency --> Contents

datascienceschool.net

 

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])

 

profile

수복의 프로그래밍 여행기

@컴수복

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!