Python/Numpy

[Numpy] Numpy (Numerical Python)

데이터 세상 2021. 2. 24. 15:28
728x90
반응형

Numpy (Numerical Python)

  • Numerical Python의 약자로서 산술계산에 특화된 라이브러리
  • 다차원 배열을 위한 기능과 선형 대수 연산을 제공
  • 반복문을 작성할 필요없이 전체 데이터 배열에 대한 빠른 연산 위한 표준 수학 함수 제공
  • 배열 데이터를 디스크에 쓰거나 읽을 수 있는 도구와 메모리에 올려진 파일을 사용
  • 선형대수, 난수 발생기, 푸리에 변환이 가능

 

Numpy 특징

  • ndarray(다차원 배열객체)
    • numpy에서 제공하는 대규모의 데이터 집합을 담을 수 있는 자료 구조로서 N차원의 배열 객체를 의미
    • 빠르고 효율적인 메모리 사용, 유연한 브로드캐스팅 지원
  • 디스크로부터 배열 기반의 데이터를 읽거나 쓰기 용이
  • C, C++, 포트란 등으로 쓰여진 코드를 통합 가능
  • 선형대수 계산, 푸리에 변환, 난수 생성기 등 다양한 기능 포함

ndarray

  • 연속된 메모리 블록에 데이터 저장
  • 같은 종류의 데이터를 담음

ndarray 객체 생성

  • numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
전달인자 설명
object 배열을 반환하는 함수 또는 데이터 목록
dtype 배열 요소의 데이터 타입, 명시하지 않은 경우 자료형을 추론
copy 객체의 복사 여부
order 배열의 메모리 저장 구조지정. C (row major), F (column major)
subok True이면 배열을 상속받은 클래스일 경우 상속 클래스 형식으로, False 이면 기본 배열 클래스 형식으로 생성 
ndmin 결과 배열의 최소 차원(dimensions) 수

ndarray 생성 함수

  • 자료형을 명시하지 않으면 dypte은 float64로 설정
함수 설명
array(데이터,  dtype=[data type] 입력데이터(리스트, 튜플, 배열 또는 순차형 데이터)를 ndarray로 변환
dtype이 명시되지 않으면 자료형을 추정하고 입력 데이터는 복사해서 생성
arange 내장 range 함수와 유사하나 리스트 대신 ndarray 반환
세번째 인자는 step size(간격)
linspace 주어진 데이터 범위를 일정한 간격으로 분할해서 배열을 만든 후 튜플로 반환
범위 내에서 균등 간격으로 배열을 생성
ones 주어진 dype으로 배열을 생성하고 내용을 모두 1로 초기화
zeros ones와 같지만 내용을 0으로 채움
empty 메모리를 할당하여 새로운 배열을 생성하지만 값을 초기화하지 않음
full 특정 값으로 모두 채워 초기화
identity, eye NxN 크기의 단위 행렬
identity: NxN 정방 행렬만 생성 가능
eye: NxM 행렬 생성 가능. k: 1값의 시작 위치
trim 삼각 행렬을 생성하는 함수
* 삼각 행렬(triangular matrix): 정사각 행렬의 특수한 경우로, 주대각선을 기준으로 대각항의 위쪽이나 아래쪽 항들의 값이 모두 0인 경우를 의미
random 임의의 값으로 배열을 생성
난수 발생 범위는 0이상 1미만
_likes 주어진 어떤 배열과 같은 shape의 배열 생성
zeros_like
ones_like
full_like

random 함수

array 함수

np.array(데이터, dtype=[data type])

기존에 있던 데이터(자료형)을 이용하여 새로운 배열 생성

# 리스트를 이용한 배열 생성
arr = np.array([10, 20, 30])
>>
array([10, 20, 30])

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


# 튜플, range함수를 이용한 배열 생성
arr = np.array(((1, 0), (0, 1)), dtype=np.float32)
>>
array([[1., 0.],
       [0., 1.]], dtype=float32)
       
arr = np.array(range(20))              
>>
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19])
import numpy as np

# zeros
np.zeros((5))
>> array([0., 0., 0., 0., 0.])

np.zeros((2, 4), dtype=np.int8)
>>
array([[0, 0, 0, 0],
	[0, 0, 0, 0], dtype=int8)

# ones
np.ones((3, 3))
>>
array([[1., 1., 1.],
	[1., 1., 1.],
	[1., 1., 1.])
    
# full
np.full((4), 5)
>> array ([5, 5, 5, 5])

# empty
np.empty((2,3), dtype=np.float64)
>>
array([[0., 0., 0.],
	[0., 0., 0.]])
    
# identity
np.identity(5, dtype=int)
>>
array([[1 0 0 0 0]
     [0 1 0 0 0]
     [0 0 1 0 0]
     [0 0 0 1 0]
     [0 0 0 0 1]])

# eye
np.eye(5, dtype=int)
>>
array([[1 0 0 0 0]
     [0 1 0 0 0]
     [0 0 1 0 0]
     [0 0 0 1 0]
     [0 0 0 0 1]])
 
np.eye(5, 10, dtype=int, k=5)
>>
array([[0 0 0 0 0 1 0 0 0 0]
     [0 0 0 0 0 0 1 0 0 0]
     [0 0 0 0 0 0 0 1 0 0]
     [0 0 0 0 0 0 0 0 1 0]
     [0 0 0 0 0 0 0 0 0 1]])

# ones_like
arr1 = np.array([[1,2,3,1], [2,4,5,6]])
arr2 = np.ones_like(arr1)
arr2
>>
array([[1 1 1 1]
 	[1 1 1 1]])
    
# arrange
np.arange(3, 50, 5)
>> array([3, 8, 13, 18, 23, 28, 33, 38, 43, 48])

# linspace
np.linspace(0, 1, 6)
>> array([0.  0.2 0.4 0.6 0.8 1. ])

random 함수

함수 설명
random 임의의 값으로 배열을 생성
난수 발생 범위는 0이상 1미만
randint 일정 범위 내에서 정수형 난수를 생성
범위는 반개구간
normal 정규 분포(nomal distribution)를 고려한 난수 배열 생성
normal(평균, 표준편차, 모양)

numpy 자료형

종류 Type Code 설명
int8, uint8 i1, u1 8비트 정수형
int16, uint16 i2, u2 16비트 정수형
int32, uint32 i4, u4 32비트 정수형
int64, uint64 i8, u8 64비트 정수형
float16 f2 반정밀도 부동소수점
float32 f4 단정밀도 부동소수점
float64 f8 배정밀도 부동소수점
string_ s 고정 길이 문자열

ndarray 속성

  • size: 배열에 있는 원소의 전체 개수
  • ndim: 배열의 차원의 개수
  • shape 배열의 각 차원의 크기, 튜플 형태로 반환
  • dtype: 배열의 타입 정보
  • base: 현재 배열이 원본인지 아니면 원본에 대한 뷰인지를 확인 가능한 속성
    • 원본인 경우에는 None
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
arr
>> array([1, 2, 3, 4, 5, 6, 7, 8])
>> 8
arr.ndim
>> 1
arr.shape
>> (8,)

arr2 = np.array([[1,2,3,4,5,6],[7,8,9,10,11,12]])
arr2
>> array([[1,2,3,4,5,6],
		[7,8,9,10,11,12]])
arr2.size
>> 12
arr2.ndim
>> 2
arr2.shape
>> (2, 6)        

astype()

  • dtype을 명시적으로 변환
impoty numpy as np

arr = np.array([10, 20, 30, 40])
arr
arr.dtype
>> 
array([10, 20, 30, 40])
dtype('int32')


float_arr = arr.astype(np.float64)
float_arr
float_arr.dtype
>>
array([10., 20., 30., 40.])
dtype('float64')
  •  

References

728x90
반응형

'Python > Numpy' 카테고리의 다른 글

[Numpy] Numpy Functions  (1) 2021.03.05
[Numpy] Numpy Shape Manipulation  (0) 2021.03.05
[Numpy] Numpy Vectorization & Broadcasting  (0) 2021.03.05