Numpy_All In One

P4·2023년 5월 2일
0

Numpy

목록 보기
1/1
post-thumbnail

Numpy

  • Python 행렬 연산의 핵심이 되는 라이브러리

Start

import numpy as np # (as = alias)

배열을 Numpy array로 변환

# ex)
a = [1, 2, 3, 4, 5, 6]

a = np.array(a) 
# array로 변환

Type 확인

print(a.ndim) 
# 차원 확인
print(a.shape) 
# 행, 열 확인
print(a.dtype) 
# 타입 확인 (int, float...)

reshape (형태 변환 --> ex) 1행 6열을 2행 3열로)

b = a.reshape(3, 2) # a = [1, 2, 3, 4, 5, 6]
# a를 3행 2열로 변환, -1 넣으면 넣은곳은 알아서 변환해줌

array 내부 요소 접근법

b[0, 1] 
# 첫번째 행, 두번째 열 요소 조회 (파이썬은 인덱스가 0부터 시작)

# 요소 접근법
# 중요

b[[0, 1]] 
# 1, 2행 조회 (2차원이기 때문에 앞의 2수가 행으로 들어감)

b[:, [0, 1]] 
# 1, 2열 (:는 모든 행을 의미함)

b[[0, 1], [0, 1]] 
# 1행 1열, 2행 2열

b[0 : 3, 1 : 3] 
# 1~3행, 2~3열

b[1 :, 1 : 3] 
# 2~행, 2~3열

array 요소 조건 검색

a[a >= 5] 
# a의 요소중 5 이상을 조회

a[(a >= 5) & (a < 6)] 
# 5이상 6미만 조회 (조건이 여러개면 소괄호로 묶어줌, pandas도 동일함)

argmax, where

np.argmax(a) 
# 최댓값의 인덱스를 알려줌, axis 삽입 가능

np.where(a > 3, 1, 0) 
# 조건, 참값, 거짓값 // 3초과는 1로, 그 이하는 0으로 바꿔줌

np.where(a > 3, 1, a) 
# 이건 3보다 크면 1로, 그 이하이면 값을 그대로 놔둠

list comprehension

list(range(1, 10, 2)) 
# 1~10 사이에서 2씩 증가하는 리스트를 만듬 --> [1, 3, 5, 7, 9]

# 또는
[2 * n + 1 for n in range(5)] # --> [1, 3, 5, 7, 9]

linspace (요소 개수에 맞춰 값 자동 분할)

np.linspace(1, 10, 10) 
# 1~10 사이에서 요소를 10개로 나눠 자동계산 --> 어레이 생성
# array([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])

np.linspace(1, 10, 4) 
# array([ 1.,  4.,  7., 10.])

Numpy의 차원개념

  • Numpy의 차원개념은 단순히 행렬이 아니다

  • axis가 증가할수록 하위 차원으로 엮이는 개념임

  • 예를들어

    [ [ [1, 2], [3, 4] ], [ [5, 6], [7, 8] ] ] 이런 3차원 array가 있을때
    
    axis = 0은 [ [1, 2], [3, 4] ] --> [ [5, 6], [7, 8] ] 방향
    
    axis = 1은 [1, 2] --> [3, 4] // [5, 6] --> [7, 8] 방향
    
    axis = 2는 1 --> 2 // 3 --> 4... 방향```

예제코드

c = [ [[1,2],[3,4]] , [[5,6],[7,8]] ]

print(np.sum(c, axis = 0))
print('--'*20)
print(np.sum(c, axis = 1))
print('--'*20)
print(np.sum(c, axis = 2))

# axis 0 = [[ 6 8] [10 12]]    (1과 5, 2와 6.... 이렇게 상위 차원끼리 엮였음)

# axis 1 = [[ 4 6] [12 14]]    (1과 3, 2와 4... 이렇게 바로 아래 차원끼리 엮임)

# axis 2 = [[ 3 7] [11 15]]    (1과 2, 3과 4.... 가장 낮은 차원끼리 엮임)
profile
지식을 담습니다.

0개의 댓글