이 영역을 누르면 첫 페이지로 이동
butter_shower 블로그의 첫 페이지로 이동

butter_shower

페이지 맨 위로 올라가기

butter_shower

[Python 데이터 분석 3대장] Numpy 라이브러리

  • 2020.08.04 10:05
  • 머신러닝 꿈나무
글 작성자: _rian

이전 포스팅 : Pandas

2020/01/13 - [Computer Engineering] - [python] 판다스(Pandas)

 

Numpy 소개

Numpy ; Numerical Python

고성능 과학계산 컴퓨팅과 데이터 분석에 필요한 파이썬 패키지입니다.

Numpy의 몇가지 장점을 소개하자면,

  • 빠르고 메모리를 효율적으로 사용하여 벡터의 산술연산과 브로드캐스팅 연산을 지원하는 다차원 배열 ndarray 데이터 타입을 지원한다.
  • 반복문을 작성할 필요 없이 전체 데이터 배열에 대해 빠른 연산을 제공하는 다양한 표준 수학 함수를 제공한다.
  • 배열 데이터를 디스크에 쓰거나 읽을 수 있다. (즉, 파일로 저장)
  • 선형대수, 난수발생기, 푸리에 변환 가능, C/C++ 포트란으로 쓰여진 코드를 통ㅇ합한다.

따라하며 Numpy를 배워보자!

1. ndarray 만들기

  • arange()
  • array([])
import numpy as np

# 아래 A와 B는 결과적으로 같은 ndarray 객체를 생성합니다.
A = np.arange(5)
B = np.array([0, 1, 2, 3, 4]) # 파이썬 리스트를 numpy ndarray로 변환

2. 크기 (size, shape, ndim)

  • ndarray.size
  • ndarray.shape
  • ndarray.ndim
  • reshape()

size, shape, ndim는 각각 행렬 내 원소의 개수, 행렬의 모양, 행렬의 축(axis)의 개수를 의미합니다. reshape() 메소드는 행렬의 모양을 바꿔줍니다. 모양을 바꾸기 전후 행렬의 총 원소 개수 (size)가 맞아야 합니다.

아래와 같이 사용할 수 있습니다.

A = np.array(10).reshape(2, 5) # 2x5 2차원 행렬로 만듦
print(A.size)
print(A.shape)
print(A.ndim)

만약 원소의 개수가 10개인데 3x3 행렬로 바꾸려고 하는 경우에는 에러가 납니다.

3. Type

Numpy 라이브러리 내부의 자료형들은 파이썬 내장함수와 동일합니다. 그런데 살짝 헷갈리는 기능이 있는데, 바로 내장함수 type()와 dtype() 입니다.

  • Numpy : numpy.array.dtype
  • 파이썬 : type()
A = np.arange(6).reshape(2, 3)
print(A)
print(A.dtype)
print(type(A))

출력

int64
<class 'numpy.ndarray'>

Numpy의 메소드인 dtype는 Numpy의 ndarray의 '원소' 데이터 타입을 반환합니다. 반면 파이썬 내장함수인 type(A)를 사용하면 행렬 A의 자료형을 반환!

4. 특수 행렬

Numpy는 수학적으로 의미가 있는 행렬들을 함수로 제공하고 있습니다.

  • 단위행렬
  • 0행렬
  • 1행렬

아래와 같이 사용할 수 있습니다.

# 단위행렬
np.eye(3)

# 0 행렬
np.zeros([2, 3])

# 1 행렬
np.ones([3, 3])

5. 브로드캐스트

Numpy의 강력한 연산 기능 중 하나입니다.

img

ndarray와 상수, 또는 서로 다른 ndarray끼리 산술연산이 가능한 기능을 말합니다.

아래 코드를 돌려봐서 어떻게 다른지 한번 확인해보세요.

print([1, 2] + [3, 4])
print([1, 2] + 3)

import numpy as np
print(np.array([1, 2]) + np.array([3, 4]))
print(np.array([1, 2]) + 3)

6. 슬라이스와 인덱싱

Numpy도 파이썬 내장 리스트와 마찬가지로 슬라이스와 인덱싱 연산을 제공합니다.

7. Random

Numpy에서 다양한 의사 난수를 지원합니다.

  • np.random.randint()
  • np.random.choice()
  • np.random.permuataion()
  • np.random.normal()
  • np.random.uniform()
# 0에서 1 사이의 실수형 난수 하나 생성
print(np.random.random())

# 0~9 사이 1개 정수형 난수 생성
print(np.random.randint(0, 10))

# 리스트에 주어진 값 중 하나를 랜덤하게 선택
print(np.random.choice([1, 2, 3, 4, 5, 6, 7, 8, 9]))


# 랜덤하게 리스트를 섞는다
print(np.random.permutation(10))
print(np.random.permutation([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))


# 이것은 정규분포를 따릅니다.
print(np.random.normal(loc=0, scale=1, size=5))    # 평균(loc), 표준편차(scale), 추출개수(size)를 조절해 보세요.

# 이것은 균등분포를 따릅니다. 
print(np.random.uniform(low=-1, high=1, size=5))  # 최소(low), 최대(high), 추출개수(size)를 조절해 보세요.

8. 전치행렬

행렬의 행과 열을 맞바꾸기, 행렬의 축을 서로 바꾸기 등에 사용되는 기능입니다.

  • arr.T
  • np.transpose
A = np.arange(24).reshape(2,3,4)
print(A)               # A는 (2,3,4)의 shape를 가진 행렬입니다. 
print(A.T)            # 이것은 A의 전치행렬입니다. 
print(A.T.shape) # A의 전치행렬은 (4,3,2)의 shape를 가진 행렬입니다.

'머신러닝 꿈나무' 카테고리의 다른 글

강화학습이란? 심층 강화학습에 대한 정의와 종류  (1) 2024.01.05
[혼공머신] 혼자 공부하는 머신러닝 & 딥러닝 1주차  (0) 2024.01.05
데이터의 성능을 높이는 방법  (0) 2020.08.02
[Python 데이터 분석 3대장] 판다스(Pandas)  (0) 2020.01.13
하둡 에코시스템(Hadoop-Ecosystem)이란  (0) 2019.11.10

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 강화학습이란? 심층 강화학습에 대한 정의와 종류

    강화학습이란? 심층 강화학습에 대한 정의와 종류

    2024.01.05
  • [혼공머신] 혼자 공부하는 머신러닝 & 딥러닝 1주차

    [혼공머신] 혼자 공부하는 머신러닝 & 딥러닝 1주차

    2024.01.05
  • 데이터의 성능을 높이는 방법

    데이터의 성능을 높이는 방법

    2020.08.02
  • [Python 데이터 분석 3대장] 판다스(Pandas)

    [Python 데이터 분석 3대장] 판다스(Pandas)

    2020.01.13
다른 글 더 둘러보기

정보

butter_shower 블로그의 첫 페이지로 이동

butter_shower

  • butter_shower의 첫 페이지로 이동

검색

메뉴

  • All Categories
  • About Me
  • Guest Book

카테고리

  • 전체보기 (223)
    • 💫 주인장 이야기 (17)
    • 🌱 와글와글뻘글 (27)
    • IT Trends (11)
    • 주인장 일상 (0)
    • 📒 내 마음대로 독서 서평 (12)
    • 머신러닝 꿈나무 (30)
      • 기본 개념 (6)
      • Hands-on! (5)
      • Paper Review (5)
      • 캐린이의 Kaggle (1)
    • 알고리즘 Algorithm (33)
      • PS (8)
    • Computer Engineering (75)
      • Python (8)
      • Cloud Computing (9)
      • C (9)
      • C++ (0)
      • Java (6)
      • Django 장고 (4)
      • 임베디드 시스템 (10)
      • 병렬 처리(Parallel Processing) (9)
      • 데이터 통신 Data communication (4)
      • 유닉스 시스템 (Unix System) (3)
      • GitHub (1)
      • 마이크로 프로세서 (micro processor) (1)
      • 데이터 마이닝 (1)
    • Error Note 🚨 (3)
    • 영어 공부 (6)
      • Live Academy (6)
    • HOBBY (2)
      • Film Log (2)

최근 글

정보

_rian의 butter_shower

butter_shower

_rian

나의 외부 링크

  • Github
  • Facebook
  • Instagram
  • LinkedIn
  • Twitter

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © _rian. Designed by Fraccino.

티스토리툴바