59doit

[Python-Numpy] #1 본문

Programming/Python(파이썬)

[Python-Numpy] #1

yul_S2 2022. 11. 6. 17:32
반응형

NumPy

대용량 데이터 배열을 효율적으로 다룰 수 있도록 설계

  • 과학 계산을 위한 라이브러리
  • 행렬/배열 처리 및 연산
  • 난수생성

 

100 만개의 정수를 저장하는 Numpy 배열과 파이썬 리스트 비교

import numpy as np
my_arr = np.arange(1000000)
my_list = list(range(1000000))

from datetime import datetime
start1 = datetime.now()
for _ in range(10): my_arr2 = my_arr * 2
print(datetime.now() - start1)

from datetime import datetime
start2 = datetime.now()
for _ in range(10): my_list2 = [x * 2 for x in my_list]
print(datetime.now() - start2)

 

배치 계산 처리 방법

import numpy as np

data = np.random.randn(2, 3)

data * 10
data + data
# 각 차원의 크기를 알려주는 shape 이라는 튜플
data.shape                               # <출력> (2, 3)

# 배열에 저장된 자료형을 알려주는 dtype
data.dtype                               # <출력> dtype('float64')

 

배열을 생성방법 : array()함수를 이용

  •  
data1 = [6,7.5,8,0,1]
arr1=np.array(data1)
arr1

# <출력> array ([6. , 7.5, 8. , 0. , 1. ])

 

  • 같은 길이를 가지는 리스트를 내포
data2 =[[1,2,3,4],[5,6,7,8]]
arr2 = np.array(data2)
arr2

# <출력>
# array([[1, 2, 3, 4],
#       [5, 6, 7, 8]])
  •  
# <arr2>
# array([[1, 2, 3, 4],
#       [5, 6, 7, 8]])

# 차원
arr2.ndim    # <출력> 2

# 차원
arr2.shape   # <출력> (2, 4)

# 전체 원소 수
arr2.size    # <출력> 8

# 첫번째 차원의 갯수
len(arr2)    # <출력> 2

arr1.dtype   # <출력> dtype('float64')
arr2.dtype   # <출력> dtype('int32')

 

np.zeros(10)
# <출력> 
# array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])


np.zeros((3,6))
# <출력> 
# array([[0., 0., 0., 0., 0., 0.],
#        [0., 0., 0., 0., 0., 0.],
#        [0., 0., 0., 0., 0., 0.]])

np.zeros((2,3,2))
# <출력> 
# array([[[0., 0.],
#         [0., 0.],
#         [0., 0.]],
#        [[0., 0.],
#         [0., 0.],
#         [0., 0.]]])


np.empty((2, 3, 2))
# <출력> 
# array([[[4., 0.],
#         [4., 0.],
#         [4., 0.]],
#        [[4., 0.],
#         [4., 0.],
#         [4., 0.]]])


np.arange(15)
# <출력> 
# array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14])

 

 

 

8 바이트 또는 64 비트로 이루어지는데 NumPy 에서 float64 로 표현

arr1 = np.array([1, 2, 3], dtype=np.float64)
arr2 = np.array([1, 2, 3], dtype=np.int32)
arr1.dtype      # <출력> dtype('float64')
arr2.dtype      # <출력> dtype('int32')
arr1            # <출력> array([1., 2., 3.])
arr2            # <출력> array([1, 2, 3])

 

 

astype 사용 :

astype 을 호출하면 새로운 dtype 이 이전 dtype 과 동일해도
항상 새로운 배열을 생성(데이터를 복사)

  • dtype 변환(캐스팅)
arr = np.array([1, 2, 3, 4, 5])
arr.dtype           # <출력> dtype('int32')

float_arr = arr.astype(np.float64)
float_arr.dtype     # <출력> dtype('float64')

 

  •  숫자 형식의 문자열을 담고 있는 배열을 숫자로 변환
numeric_strings = np.array(['1.25', '-9.6', '42'], dtype=np.string_)
numeric_strings.astype(float)    # <출력> array([ 1.25, -9.6 , 42.  ])

 

 

부동소수점수 > 정수형 dtype변환 ; 소수점 아래 버림

arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
arr                            # <출력> array([ 3.7, -1.2, -2.6,  0.5, 12.9, 10.1])
arr.astype(np.int32)           # <출력> array([ 3, -1, -2,  0, 12, 10])

 

 

다른 배열의 dtype 속성 이용

int_array = np.arange(10)
int_array                         
# <출력> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

calibers = np.array([.22, .270, .357, .380, .44, .50], dtype=np.float64)
calibers.dtype                    
# <출력> dtype('float64')

int_array.astype(calibers.dtype)  
# <출력> array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

 

 

 

 

축약코드 사용

empty_uint32 = np.empty(8, dtype='u4')       # 부호가 없는 32 비트 정수형
empty_uint32

# <출력> array([1, 0, 4, 0, 4, 0, 4, 0], dtype=uint32)

 

 '벡터화' : 같은 크기의 배열 간의 산술 연산은 배열의 각 원소 단위로 적용

arr = np.array([[1., 2., 3.], [4., 5., 6.]])
arr
# <출력> 
# array([[1., 2., 3.],
#        [4., 5., 6.]])

arr * arr
# <출력>
# array([[ 1.,  4.,  9.],
#        [16., 25., 36.]])

arr - arr
# <출력> 
# array([[0., 0., 0.],
#        [0., 0., 0.]])

 

 

스칼라 인자가 포함된 산술 연산의 경우 배열 내의 모든 원소에 스칼라 인자가 적용된다.

1 / arr
# <출력> 
# array([[1.    , 0.5   , 0.3333],
#        [0.25  , 0.2   , 0.1667]])

arr ** 0.5
# <출력> 
# array([[1.    , 1.4142, 1.7321],
#        [2.    , 2.2361, 2.4495]])

 

 

 

 

같은 크기를 가지는 배열 간의 비교 연산은 불리언 배열을 반환

arr2 = np.array([[0., 4., 1.], [7., 2., 12.]])
arr2
# <출력> 
# array([[ 0.,  4.,  1.],
#        [ 7.,  2., 12.]])

arr2 > arr
# <출력> 
# array([[False,  True, False],
#        [ True, False,  True]])

 

반응형

'Programming > Python(파이썬)' 카테고리의 다른 글

[Python-Numpy] #3  (0) 2022.11.06
[Python-Numpy] #2  (2) 2022.11.06
[Python] os 모듈 파일 디렉터리 관련함수  (0) 2022.11.04
[Python] 예외처리  (0) 2022.11.04
[Python] 전처리/정규화  (0) 2022.11.03
Comments