티스토리 뷰

 

통계할 때 자주 쓰이는 numpy 모듈을 알아봅시다 :)


[Numpy]

- 수학, 과학 계산용 패키지
- 성능: 파이썬의 리스트보다 빠름
- 메모리 사이즈: 파이썬의 리스트보다 작은 메모리를 사용
- 빌트인 함수: 선형함수, 통계관련 여러 함수들을 내장

 

 


1) 모듈 불러오기

import numpy
numpy
numpy

out::::

<module 'numpy' from 'C:\\Users\\82103\\anaconda3\\lib\\site-packages\\numpy\\__init__.py'>

실행하게 되면 다른 사람이 만들어 놓은 모듈이 설치 되었다는 것을 알려줍니다.

 

 

 

2) 모듈 별칭 주기

# 별칭을 주자(as)
import numpy as np
np

out::::

 

<module 'numpy' from 'C:\\Users\\82103\\anaconda3\\lib\\site-packages\\numpy\\__init__.py'>

별칭으로 실행하게 되어도 numpy로 실행했을 떄와 객체가 같음을 확인할 수 있습니다.

 

 

 

3) array(배열)

- 여러 값들의 그룹

 

  • 기본적으로 ndarray를 만드는 방법
arr = np.array([1,2,3,4])
type(arr) # numpy.ndarray = n dimension array

out::::

numpy.ndarray

실제로 type을 입력해보면 ndarray임을 확인할 수 있습니다.

 

  • 파이썬 list를 ndarray로 형변환
# 파이썬의 기본 list
list1 = [1,2,3,4] # 1차원
list2 = [[1,2,3,4],[5,6,7,8]] # 2차원

# 기본 list -> ndarray (형변환)
arr1 = np.array(list1)
arr2 = np.array(list2)

 

 

 

4) array의 data 타입

- ndarray는 list와 다르게 1개의 데이터 타입만 허용

 

list는 서로 다른 데이터 타입도 저장 가능합니다.

# list는 서로 다른 데이터 타입도 저장 가능
list = [1, 3.14, 'python','😍','1234',True]

 

ndarray 안에 int 타입과 float 타입을 넣으면 저장이 안 될 것 같지만, 알아서 int 타입을 float 타입으로 저장하게 됩니다.

arr = np.array([1,2,3.14,4])
arr # noarray는 단일 타입만 저장할 수 있기 때문에 int 타입을 더 큰 자료형인 float 타입으로 저장

out::::

array([1.  , 2.  , 3.14, 4.  ])

 

  • type을 통일
# int와 float 타입이 같이 존재하는 경우 int로 설정
arr = np.array([1,2,3.14,4], dtype=int)
arr

out::::

array([1, 2, 3, 4])

 

'1234'은 str타입이지만 int 타입으로 변환 가능합니다.

arr = np.array([1, 2, 3, 3.14, '1234'],dtype=int)
arr

out::::

array([   1,    2,    3,    3, 1234])

 

 

 

5) 슬라이싱(Slicing)

- 배열의 부분 선택

arr = np.array(['😍','😊','👍','🙌','💕'])

print(arr[0])
print(arr[4])
print(arr[-1])

out::::

😍
💕
💕

 

print(arr[0:3]) # 0번부터 3전까지(0부터 2까지)

out::::

['😍' '😊' '👍']

 

print(arr[2:]) # 2번부터 끝까지

out::::

['👍' '🙌' '💕']

 

print(arr[:2]) # 맨처음부터 1까지

out::::

['😍' '😊']

 

 

 

6) Fancy 인덱싱

- 범위가 아닌 특정 index의 집합의 값을 선택하여 추출하고 싶을 때 활용

arr = np.array([10,23,2,7,90,65,32,66,70])
idx = [1,3,5] # 추출하고 싶은 인덱스를 리스트로 저장

arr[idx]

out::::

array([23,  7, 65])

 

 

 

7) Boolean 인덱싱

- 조건 필터링을 통하여 Boolean 값을 이용한 색인

arr = np.array(['😍','😊','👍','🙌','💕'])
# 추출하고 싶은 인덱스는 True, 아니면 False로
myValue = [True, False, True, False, True]

arr[myValue]

out::::

array(['😍', '👍', '💕'], dtype='<U1')

 

  • ndarray와 짝이 맞지 않으면 index 에러
myValue = [True, False, True, False] # 짝이 안 맞으면 index에러
arr[myValue]

out::::

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_10796/1397428343.py in <module>
      1 myValue = [True, False, True, False] # 짝이 안 맞으면 index에러
----> 2 arr[myValue]

IndexError: boolean index did not match indexed array along dimension 0; dimension is 5 but corresponding boolean dimension is 4

 

  • 조건을 이용한 Boolean 인덱싱
arr2d = np.array([[1,2,3,4],
                 [5,6,7,8],
                 [9,10,11,12]])
                 
arr2d > 4

out::::

array([[False, False, False, False],
       [ True,  True,  True,  True],
       [ True,  True,  True,  True]])

ndarray 안에 조건식을 넣으면 인덱싱을 할 수 있습니다.

그런데 Boolean 인덱싱을 하면 ndarray -> 1차원으로 바뀌는 것을 기억합시다.

arr2d[arr2d>4] # Boolean 인덱스를 사용하면 1차원으로 바뀜

out::::

array([ 5,  6,  7,  8,  9, 10, 11, 12])

 

 

 

8) 행렬 연산

 

* Matrix

- 행(row) + 열(column)

- 데이터분석 및 기계학습에서는 행렬을 제외하고 연산할 수 없음

 

  • 덧셈, 뺄셈, 곱셈 연산

- shape가 같아야 함

- 같은 position끼리 연산

a = np.array([[1,2,3],
            [2,3,4]])
b = np.array([[3,4,5],
             [1,2,3]])

 

* 덧셈연산

 a + b # 각각의 position끼리 연산

out::::

array([[4, 6, 8],
       [3, 5, 7]])

 

* 뺄셈 연산

a - b

out::::

array([[-2, -2, -2],
       [ 1,  1,  1]])

 

* 곱셈 연산

a * b # 같은 position 끼리 연산

out::::

array([[ 3,  8, 15],
       [ 2,  6, 12]])

 

  • dot procuct(내적)

- 맞닿는 shape가 같아야 함

a.shape, b.shape

out::::

((3, 3), (3, 2))

앞 ndarray의 '열'과 뒤 ndarray의 '행'이 같아야 합니다.

 

np.dot(a,b)

out::::

array([[22, 28],
       [22, 28],
       [31, 40]])

 

 

 

9)  arange

- 순차적인 값을 생성할 때 사용

arr = np.arange(1,11) # 1부터 11미만
arr

out::::

array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

 

또 다른 방법입니다.

arr = np.arange(start=1, stop=11)
arr

out::::

array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

 

 

 

10)  정렬(sort)

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

np.sort(arr) # 기본적으로 오름차순 정렬
np.sort(arr)[::-1] # 내림차순

 

  • 2차원에서의 정렬
# 2차원 sort
arr2d = np.array([[11,10,12,9],
                 [3,1,4,2],
                 [5,6,7,8]])
                 
 # 행 정렬
np.sort(arr2d, axis=0) # 행의 맨 처음 성분으로 오름차순 정렬

# 열 정렬
np.sort(arr2d, axis=1) # 각 열에서 오름차순 정렬

# 마지막 방향
np.sort(arr2d, axis=-1) #(행)(열) 이므로 -1은 (열)에 해당

- axis=0 : 행

- axis=1 : 열

- axis=-1 : 열('행','열' 에서 마지막 성분에 해당하므로 '열'을 의미)

 

참고로, xyz 성분 이라면 axis=-1은 z성분을 뜻하겠습니다.


여기까지 numpy 모듈을 알아봤습니다 :)

728x90
LIST
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함