Sesac 29일차

SungMin·2022년 11월 14일
0

Sesac-Python

목록 보기
5/11

기본 환경 설정

아나콘다 설치

  • 파이썬이 새 버전이 나올 때마다 라이브러리 등을 새로 맞추는 작업이 따로 필요하다.
  • 아나콘다는 이런 패키징을 같이 해주는 장점이 있음.
  • 단점은 그래서 최신 파이썬보다는 버전 업데이트가 느림.
  • 우선은 아나콘다로 배우고, 나중에 숙련되면 파이썬 버전을 직접 맞춰가길 추천.

  • 대부분 기본값으로 설치하고, path 환경변수만 체크해서 설치 진행하였음.

trello 이용

jupyter notebook

  • 기본 경로 설정
  • jupyter 실행 후 경로 설정 후 탐색기 주소 복사

  1. jupyter-notebook -> jupyter-lab
  2. 맨 뒤를 지우고 탐색기 주소를 붙여넣음

  1. 확인 클릭 후 다시 실행해서 제대로 나오는지 확인

  1. 만약 필요하다면 크롬을 기본 브라우저로 설정
  2. 폴더 및 파일 생성

Numpy

배열의 모양과 크기

array_example = np.array([[[0, 1, 2, 3],
                           [4, 5, 6, 7]],

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

                          [[0 ,1 ,2, 3],
                           [4, 5, 6, 7]]])
                           
                        
array_example.ndim
3

array_example.size
24

array_example.shape
(3, 2, 4)

축 지정 정렬

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

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

np.sort(a, axis=0)

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

np.sort(a, axis=1)

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

np.sort(a, axis=-1)

array([[1, 4],
       [1, 3]])
  • 위 모양에서 2 X 2 행렬이므로 aixs를 0으로 놓으면 행 기준, 1로 놓으면 열 기준으로 정렬을 하게 된다.
  • 그런데 2차원에서는 1과 -1이 모두 열 기준이 되기에, 두 경우의 결과값이 같아지게 된다.

인덱싱과 슬라이싱

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

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

five_up = (a >= 5)
print(a[five_up])
[ 5  6  7  8  9 10 11 12]

divisible_by_2 = a[a%2==0]
print(divisible_by_2)
[ 2  4  6  8 10 12]

c = a[(a > 2) & (a < 11)]
print(c)
[ 3  4  5  6  7  8  9 10]

x = np.arange(1, 25).reshape(2, 12)
x
array([[ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12],
       [13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]])

np.hsplit(x, 3)
[array([[ 1,  2,  3,  4],
        [13, 14, 15, 16]]),
 array([[ 5,  6,  7,  8],
        [17, 18, 19, 20]]),
 array([[ 9, 10, 11, 12],
        [21, 22, 23, 24]])]


np.hsplit(x, (3, 5))
[array([[ 1,  2,  3],
        [13, 14, 15]]),
 array([[ 4,  5],
        [16, 17]]),
 array([[ 6,  7,  8,  9, 10, 11, 12],
        [18, 19, 20, 21, 22, 23, 24]])]

np.hsplit(x, (3, -2))
[array([[ 1,  2,  3],
        [13, 14, 15]]),
 array([[ 4,  5,  6,  7,  8,  9, 10],
        [16, 17, 18, 19, 20, 21, 22]]),
 array([[11, 12],
        [23, 24]])]

브로드캐스팅(broadcasting)

  • 브로드캐스팅이 가능하려면 각 행렬들의 차원이 동등하거나, 1이어야 한다. 마치 행렬의 크기가 다르면 곱셈에 제약이 걸리는 것과 비슷하다.

  • 브로드캐스팅 가능

A (2d array): 5 x 4
B (1d array): 1
Result (2d array): 5 x 4

A (2d array): 5 x 4
B (1d array): 4
Result (2d array): 5 x 4

A (3d array): 15 x 3 x 5
B (3d array): 15 x 1 x 5
Result (3d array): 15 x 3 x 5

A (3d array): 15 x 3 x 5
B (2d array): 3 x 5
Result (3d array): 15 x 3 x 5

A (3d array): 15 x 3 x 5
B (2d array): 3 x 1
Result (3d array): 15 x 3 x 5

  • 브로드캐스팅 불가능

A (1d array): 3
B (1d array): 4 # trailing dimensions do not match

A (2d array): 2 x 1
B (3d array): 8 x 4 x 3 # second from last dimensions mismatched

  • 곱하는게 행렬이 아닌 스칼라 값이면 가능하다.
a = np.array([1.0, 2.0, 3.0])
b = 2.0
a * b
array([2.,  4.,  6.])

행렬 전치 및 변형

data.reshape(2, 3)
array([[1, 2, 3],
       [4, 5, 6]])
data.reshape(3, 2)
array([[1, 2],
       [3, 4],
       [5, 6]])


arr = np.arange(6).reshape((2, 3))
arr
array([[0, 1, 2],
       [3, 4, 5]])

arr.transpose()
array([[0, 3],
       [1, 4],
       [2, 5]])

arr.T
array([[0, 3],
       [1, 4],
       [2, 5]])

배열 뒤집기

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

# 모두 뒤집기
reversed_arr = np.flip(arr_2d)
print(reversed_arr)
[[12 11 10  9]
 [ 8  7  6  5]
 [ 4  3  2  1]]
 
 
# 행만 뒤집기
reversed_arr_rows = np.flip(arr_2d, axis=0)
print(reversed_arr_rows)
[[ 9 10 11 12]
 [ 5  6  7  8]
 [ 1  2  3  4]]

# 열만 뒤집기
reversed_arr_columns = np.flip(arr_2d, axis=1)
print(reversed_arr_columns)
[[ 4  3  2  1]
 [ 8  7  6  5]
 [12 11 10  9]]

profile
초보 개발자의 학습 저장용 블로그

0개의 댓글