[python 수학] [Numpy] 넘파이 기본 문법 정리

파이썬에 리스트, 튜플 , 딕셔너리와 같은 기본 데이터 타입이 있는 것처럼 넘파이에는 다차원 배열을 위한 ndarray 클래스를 제공

넘파이 기초 문법

  • 1차원 리스트를 넘파이의 array 함수에 전달하면 쉽게 ndarray 객체로 변환 가능

1차원 리스트를 넘파이의 array 함수에 전달하면 쉽게 ndarray 객체로 변환 가능

범용적인 용도로 사용되는 파이썬 리스트 타입을 행렬과 다차원 배열에 최적화된 ndarray 타입으로 변환 !

import numpy as np

data = [1,2,3,4]

arr = np.array(data)
print(arr)
print(data)

ndarray 객체는 리스트와 달리 데이터와 데이터 사이에 콤마 구분 기호가 없이 출력

data2 = [[1,2],[3,4]]

arr2 = np.array(data2)
print(arr2)
print(data2)

ndarray 객체의 인스턴스 변수를 사용해서 저장된 데이터의 정보를 조회 가능
shape 은 ndarray의 크기 정보를, ndim 은 차원 정보, dtype 은 데이터 타입을 표현

data = [
    [1],
    [2],
    [3],
    [4]
]

c = np.array(data)
print(c.shape)

???? zeros | ones
numpy 는 특정 값으로 구성된 ndarray 객체를 생성하는 몇 가지 함수를 제공

대표적으로 zeros 와 ones 함수가 있다.
zeros 는 0으로 채워진 ndarray를 리턴
ones 는 1로 채워진 ndarray 를 리턴함

zeros 와 ones 는 기본적으로 float 타입으로 데이터를 저장함 . !

튜플 형태로 전달하면 다차원 배열을 생성 할 수 있다.

print(np.zeros(3))
print(np.ones(3))

print(np.zeros((3,4)))

???? arange

넘파이의 arrange 함수는 최대 세 개의 파라미터를 입력 가능하며 규칙적인 숫자를 갖는 ndarray 객체를 반환함

하나의 파라미터를 입력하면 0부터 순차적으로 증가하는 숫자를 생성하며, 두 개룰 사용하면 시작과 끝 범위를 표현해서 범위내의 순차 증가하는 숫자를 만들 수 있다.

print(np.arange(5))

print(np.arange(1,10,2))

???? reshape

넘파이 배열의 shape을 변경할 수 있는 reshape 함수!

ndarr1 = np.arange(6)
print(ndarr1)

ndarr2 = ndarr1.reshape(2,3)

print(ndarr2)

대신 행과 열의 개수는 원본 데이터를 고려하여 입력해야 한다.

데이터 타입

넘파이 주요 데이터 타입

구분 넘파이 타입 축약어 설명
불린형 bool b1 True, False
정수형 np.int8 np.int16 np.int32 np.int64 i1 i2 i4 i8  
  np.uint8 np.uint16 np.uint32 np.uint64 u1 u2 u4 u8  
실수형 np.float16 np.float32 np.float64 f2 f4 f8  
복소수형 np.complex64 np.complex128 c8 c16  
문자형 string s  
  • 넘파이는 파이썬 기본 타입보다 다양한 데이터 타입을 제공한다.
  • int8과 uint8은 8비트로 숫자를 표현하는 것은 같지만, int8은 음수까지 표현가능하며 uint는 양수만 표현하는 대신 int8보다 더 큰 숫자까지 포함이 가능하다.
  • array 함수에서 dtype 옵션은 생성할 ndarray의 데이터 타입을 지정하는 경우에 사용이 가능하다. 데이터의 범위가 1~3이라면 uint64 보다 int8,uint8이 메모리 관리 측면에서 더 좋음!

astype 을 활용해서 기존의 ndarray를 다른 타입으로 변경도 가능 !

arr = arr.astype('int8')
print(arr)
print(arr.dtype)

높은 비트를 사용하는 실수 데이터 타입이 더 높은 정밀도를 갖는다.

16비트 실수와 32비트 실수로 1.3333을 표현해보면

a16 = np.array([1.33333],dtype=np.float16)
a32 = np.array([1.33333],dtype = np.float32)

print(a16)
print(a32)

[1.333]

[1.33333]

16 비트는 표현할 수 있는 범위가 32비트 보다 작아서 값을 제대로 표현하지 못함

높은 비트로 데이터를 표현하는 것이 정확하지만, 저장공간을 고려해야 함 !

???? nan | inf
넘파이에는 무한대와 결측치를 표현하는 특수한 데이터가 존재

nan 은 Not a number 의 약자로 숫자가 아닌 값 혹은 정의되지 않은 숫자를 의미. inf 혹은 -inf 는 무한대의 숫자를 뜻함

print(np.nan , type(np.nan))
print(np.inf, type(np.inf))
print(-np.inf,type(-np.inf))

nan <class 'float'>
inf <class 'float'>
-inf <class 'float'>

세 개의 특수한 값을 float 형임을 알 수 있다 !

인덱싱과 슬라이싱

넘파이는 파이썬 리스트를 확장해서 만들었기 때문에 리스트가 제공하는 대부분의 기능 사용 가능

따라서 리스트의 인덱싱과 동일하게 인덱스를 활용 가능

print(arr)
print(arr[1])
print(arr[:2])

리스트의 기능에 추가해서 불연속적인 데이터를 슬라이싱 할 수 있다

target = [1,3] #가져오려는 데이터의 인덱스를 리스트로 정의한다
print(arr[target]) #1번,3번 위치의 데이터가 슬라이싱된다.

ndarray 는 한 번에 컬럼의 슬라이싱 할 수 있다! 인덱싱과 비슷하게 [행,열] 정보를 차례로 전달하여 슬라이싱 가능하다

arr = np.arange(20).reshape(4,5)
print(arr[:2])
print(arr[:,:2])

[[0 1 2 3 4] [5 6 7 8 9]]

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

[[ 0 1] [ 5 6]
[10 11] [15 16]]

브로드 캐스팅

파이썬에서는 반복문을 사용해서 전체 데이터에 연산을 적용했던 것과는 달리 연산이 전체 데이터로 확장된다.
반복문을 사용하지 않아서 코드가 짧아지고 읽기도 좋음

a = np.array([1,2,3])
b = np.array([2,3,4])
print(a+b)
print(a*b)
print(a%b)

[3 5 7]
[ 2 6 12]
[1 2 3]

스칼라 연산은 전체 데이터에 확장 적용된다!

print(a+3)

[4 5 6]

이처럼 연산이 확장 적용되는 것을 브로드 캐스팅이라고 한다

브로드 캐스팅이 적용되기 위해서는 다음 조건 중 하나라도 충족해야 한다

[ 조건 1 ] 뒤 축의 길이가 같다
[ 조건 2 ]비교하는 어느 한 축의 길이가 1이다

작은 크기의 ndarray가 확장 가능한지를 체크해야 함

조건 연산

numpy와의 연산은 브로드캐스팅이 적용되어 전체 데이터에 연산이 반복 적용된다.

비교 연산

arr = np.array([10,20,30])
print(arr>10)

[False True True]

인덱스의 리스트로 슬라이싱한 것과 유사하게 True 와 False 가 담긴 ndarry 로 조건이 참(True) 인 데이터만을 슬라이싱할 수 있다

arr = np.array([10,20,30])
print(arr[[False,True,True]])

[20,30]

arr = np.array([10,20,30])
cond = arr >10
print(arr[cond])

얻어온 조건이 모두 참인지의 여부를 확인하기 위해 any 나 all 함수를 이용할 수 있다.

cond.all()
cond.any()
arr = np.array([10,20,30])
cond = arr>10
arr[cond] = 1 #조건을 충족하는 데이터를 선택해서 1로 업데이트
arr[~cond] = 0 # 조건을 충족하지 않는 경우 0으로 업데이트
print(arr)

함수와 메서드

넘파이는 수치 연산과 관련된 다양한 함수와 메서드를 제공

파이썬이 기본적으로 제공하는 함수도 기능을 확장에서 메서드로 제공한다.

???? sum

print(arr.sum())
print(arr.sum(axis = 1)) #axis 옵션 설정 가능

sum 메서드 뿐만 아니라 min, max, mean, std, var 메서드를 사용할 수 있다.

np.random.randint(3)
np.random.randint(46,size=5)

???? linspace

차트를 그릴 때 빈번히 사용하는 함수. 첫 번째로 시작 값, 두 번째로 종료 값, 세 번째로 분할 지점의 수를 입력받아 균일한 크기의 구간으로 분할

x = np.linspace(0,10,3)
print(x)

[ 0. 5. 10. ]

???? stack

여러 개의 ndarray 를 하나로 합칠 때 사용

  • vstack: 수직 방향으로 ndarray 를 이어 붙임
  • hstack: 수평 방향으로 ndarray를 이어 붙임
a = np.arange(4)
b = np.arange(4,8)
c = np.vstack([a,b])
print(c)

[[0 1 2 3]
[4 5 6 7]]

'금융 데이터 분석을 위한 파이썬 판다스' 책을 참고하였습니다

 

[출처] https://velog.io/@jochedda/Numpy-%EB%84%98%ED%8C%8C%EC%9D%B4-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
87 [python 일반] 파이썬에서 도커 사용하기: 기초부터 배포까지 졸리운_곰 2024.12.01 410
86 [python 일반] 파이썬 디컴파일 방지 난독화 초간단 방법 file 졸리운_곰 2024.08.13 539
85 [python 일반] [Python] python 예제 - 프로그램 실행 위치 확인 방법 3종 - os.getcwd,... 졸리운_곰 2024.07.28 451
84 [python 일반] [Python] How to capture output of Python's interpreter and show in a Text widget? 졸리운_곰 2024.07.26 230
83 [python 일반] [Python] How to Fix Python’s “List Index Out of Range” Error in For Loops 졸리운_곰 2024.07.26 284
82 [python 일반] [Python] Python 리스트에 특정 값이 있는지 체크하기 졸리운_곰 2024.07.26 418
81 [python 일반] [Python] 원하는 시간마다 파이썬 자동 실행 file 졸리운_곰 2024.07.25 337
80 [python 일반] [Python] pyinstaller] PyInstaller -i, --add-data로 아이콘(icon)을 포함하자 file 졸리운_곰 2024.07.19 428
79 [python 일반] [Python] pyinstaller : 파이썬 컴파일 시 코드 암호화 & 복호화 file 졸리운_곰 2024.06.10 374
78 [python 일반] ** Date형식을 String형식으로 변환 ** 졸리운_곰 2024.06.08 297
77 [python 일반] [Python] strftime과 strptime file 졸리운_곰 2024.06.07 377
76 [python 일반] How to Run a Periodic Background Task in Python 졸리운_곰 2024.06.07 324
75 [python 일반] *win32ctypes.pywin32.pywintypes.error when using pyinstaller in VS Code - Possible Virus/Trojan? 졸리운_곰 2024.06.07 453
74 [python 일반] 【Python】The 'pathlib' package is an obsolete backport of a standard library ・・・ 졸리운_곰 2024.05.30 318
73 [Python 일반] 파이썬 exe 파일 만들기 졸리운_곰 2024.05.30 307
72 [Python] 클립보드 무엇인가? Pyperclip을 통한 자동화 file 졸리운_곰 2024.05.06 364
71 [Python] PyQt와 PySide에 대한 잡설 file 졸리운_곰 2024.04.25 253
70 [python 일반] How to Update All Python Packages : 설치된 파이썬 패키지 모두 업데이트 하기 file 졸리운_곰 2024.03.16 604
69 [python, C++] Interfacing C++ and Python with the Python API : C++ 및 Python과 Python API의 인터페이스 file 졸리운_곰 2023.08.18 302
68 [python 일반] 파이참 에러 : Fatal Python error: init_stdio_encoding: failed to get the Python codec name of the stdio encoding file 졸리운_곰 2023.07.06 354
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED