Numpy

타키탸키·2021년 7월 8일
0

데이터 사이언스

목록 보기
3/26
post-thumbnail

🎱 Numpy

  • Numpy
    • Numerical Python
    • 수와 관련된 Python 도구
  • Numpy가 중요한 이유
    • numpy 배열(numpy array) 제공
    • Python 리스트와 유사
    • 일반 Python 코드로 처리하기 어려운 대용량 데이터 처리 용이
    • 행렬과 이차원 배열 활용

🎱 Numpy Array의 생김새

import numpy
array1 = numpy.array([2, 3, 5, 7, 11, 13, 17, 19, 21, 23])

type(array1)
numpy.ndarray
  • numpy 모듈 불러오기
    • numpy 모듈의 array 함수 활용
    • 파라미터: Python 리스트
    • array1의 자료형: numpy.ndarray
array1.shape
(10, )
array2 = numpy.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
array2
array2.shape
array([[1,2,3,4],
	   [5,6,7,8],
       [9,10,11,12]])
(3, 4)
  • 이차원 배열
    • 배열 속 배열
  • ndarray
    • n-dimensional array
    • n차원 배열
  • .shape
    • numpy array의 모양을 알려준다
array1.size
array2.size
10
12
  • .size
    • numpy array의 요소 개수

🎱 Numpy Array를 만드는 다양한 방법

  • Python list를 통해 생성
    • numpy 모듈의 array 메소드에 파라미터로 Python list를 넘겨주기
      • numpy array 리턴
array1 = numpy.array([2, 3, 5, 7, 11, 13, 17, 19])

print(array1)
[2 3 5 7 11 13 17 19]
  • 균일한 값으로 생성
    • numpy 모듈의 full 메소드
      • 모든 값이 같은 numpy array 생성 가능
array1 = numpy.full(3, 4)

print(array1)
[4 4 4]
  • 모든 값이 0인 numpy array 생성
    • full 메소드 사용
    • zeros 메소드 사용
array1 = numpy.full(4, 0)
array2 = numpy.zeros(4, dtype=int)

print(array1)
print()
print(array2)
[0 0 0 0]

[0 0 0 0]
  • 모든 값이 1인 numpy array 생성
    • full 메소드 사용
    • ones 메소드 사용
array1 = numpy.full(4, 1)
array2 = numpy.ones(4, dtype=int)

print(array1)
print()
print(array2)
[1 1 1 1]

[1 1 1 1]
  • 랜덤한 값들로 생성
    • numpy의 random 모듈의 random 함수 사용
array1 = numpy.random.random(4)
array2 = numpy.random.random(4)

print(array1)
print()
print(array2)
[0.46484312 0.78945153 0.14785236 0.98756213]

[0.25469853 0.46316987 0.13575436 0.94358123]
  • 연속된 값들이 담긴 numpy array 생성
    • numpy 모듈의 arange 함수 사용
    • arange 함수
      • python의 기본 함수인 range와 유사
      • 파라미터 1개: 0부터 n-1까지의 값
      • 파라미터 2개: m부터 n-1까지의 값
      • 파라미터 3개: a부터 b-1까지의 값들 중 간격이 c인 값
# 파라미터 1개
array1 = numpy.arange(5)
print(array1)

# 파라미터 2개
array1 = numpy.arange(3, 6)
print(array1)

# 파라미터 3개
array1 = numpy.arange(2, 11, 2)
[0 1 2 3 4]
[3 4 5]
[2 4 6 8 10]

🎱 모듈 별명 지어주기

  • 모듈 별명(alias) 지어주기
    • import numpy as np
    • import matplotlib.pyplot as plt
  • numpy 대신 np 입력 가능
    • np.full(4,0)

🎱 인덱싱, 슬라이싱

  • 인덱스
    • list나 array에서 몇 번째 자리인지 나타내는 값
    • 0번부터 시작
  • 인덱싱
    • 인덱스를 이용해서 해당 위치에 있는 값을 받아오는 것
    • array1[0]
    • 음수 인덱스도 가능
  • 리스트 인덱싱
    • array[[1,3,5]]
    • 결과: array([1번 인덱스 값, 3번 인덱스 값, 5번 인덱스 값])
  • numpy array로 인덱싱
array2 = np.array[[1,3,5]]
array1[array2]
array([1번 인덱스 값, 3번 인덱스 값, 5번 인덱스 값])
  • numpy array로 리스트 슬라이싱
array1[0:5]
array1[:5]

array1[3:]
array1[:5:2]
array([0번 인덱스 값, 1번 인덱스 값, ..., 4번 인덱스 값])
# 동일한 결과

array([3번 인덱스 값, ..., 마지막 인덱스 값])
array([0번 인덱스 값, 2번 인덱스 값, 4번 인덱스 값])

🎱 Numpy 기본 연산

  • array 모든 요소에 두 배 곱하기
array1 = np.arange(6)
array1

array1 = array1 * 2
array([0, 1, 2, 3, 4, 5])
array([0, 2, 4, 6, 8, 10])
  • Python 코드와 비교
for i in range(len(array1)):
    array1[i] = array1[i] * 2
  • 다른 배열과 연산
array1 = np.arange(6)
array2 = np.arange(6, 11)

array1 + array2
array([6, 8, 10, 12, 14, 16])

🎱 Numpy 불린 연산

  • numpy array 불린 연산
array1 = np.array([2,4,6,8,10])

array1 > 5 
array([False, False, True, True, True])
  • where
    • True가 담긴 인덱스만 골라낸다
booleans = np.array([True, False, False, True, True])
np.where(booleans)
(array([0, 3, 4]),)
  • 응용
    • 조건식에 대해 True가 담긴 인덱스만 골라내기
    • 결과적으로, 조건에 해당하는 값만 필터링 할 수 있다
    • 리스트 안에 불린 리스트가 들어가면 불린 값이 True인 인덱스의 데이터만 추출한다
filter = np.where(array1 > 4)
filter
array1[filter] # 리스트 인덱싱
(array([2, 3, 4],)
array([6, 8, 10])

🎱 Numpy Array vs. Python List

  • 공통점
    • 여러 값을 보관한다
  • 문법 차이
    • 덧셈 연산 결과
    • array + 정수 >> 각 요소에 더한 값 / 리스트 + 정수 >> 에러
    • 곱셈 연산 결과
np.array([1, 2, 3]) + np.array([4, 5, 6])
[1, 2, 3] + [4, 5, 6]

np.array([1, 2, 3]) * 3
[1, 2, 3] * 3
array([4, 7, 9])   # 값이 더해진다
[1, 2, 3, 4, 5, 6] # 리스트가 이어진다

array([3, 6, 9])             # 값이 곱해진다
[1, 2, 3, 1, 2, 3, 1, 2, 3]  # 요소를 반복한다
  • 성능 차이
    • Python list
      • 자료형 상관 없이 담을 수 있다
      • 처리 속도 Down
    • numpy array
      • 같은 요소들만 담을 수 있다
      • 처리 속도 Up
import numpy as np
	from timeit import time it
    
    	x = np.arange(100000000)
        y = list(range(100000000))
        
        timeit(lambda: x * 2, number=1)
        timeit(lambda: [n * 2 for n in y], number=1)
numpy >> 0.4초
리스트 >> 6.6초
  • 사용 팁
    • Python
      • 값을 추가하고 제거할 때
    • Numpy
      • 수치 계산이 많고 복잡할 때
      • 다차원 배열(행렬) 활용할 때

🎱 Numpy 기본 통계

  • 최댓값, 최솟값
    • max 메소드와 min 메소드
import numpy as np

array1 = np.array([2, 4, 6, 8, 10])

print(array1.max())
print(array1.min())
10
2
  • 평균값
    • mean 메소드
import numpy as np

array1 = np.array([2, 4, 6, 8, 10])

print(array1.mean())
6
  • 중앙값
    • median 메소드
    • numpy array의 메소드가 아닌 numpy의 메소드
import numpy as np

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

print(np.median(array1))
print(np.median(array2))
6
5
  • 표준편차, 분산
    • 값들이 평균에서 떨어진 정도를 나타내는 지표
import numpy as np

array1 = np.array([2, 4, 6, 8, 10])

print(array1.std())
print(array1.var())
3.16227766
10
출처: CODEIT - 데이터 사이언스 입문
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글