본문 바로가기
Python/Alice Python Basic

Python 기초 프로그래밍의 간단 정리3

by Thinking 2021. 7. 7.

1. Module의 간단 정리

 모듈은 특정 목적을 가진 함수, 자료의 모임을 의미한다.

import 키워드를 이용해서 모듈 사용하고.(dot)을 쓴 후에 모듈 속 함수/변수 사용을 하여 나타낼 수 있다.

Ex) import random

      print(random.randrange(0,2))

# 0이상 2 미만 수 중 임의로 출력

 

뿐만 아니라 모듈 만들기도 가능한데 우리가 원하는 내용이 담긴 모듈 제작 기능. py로 생성 가능하다.

py파일을 생성 후 , 함수와 변수를 만든다.

 

#cal.py

def plus(a, b):

  c= a+b

  return c

다른 파일에서 만들어 둔 .py 파일을 main.py로 불러 사용할 수 있다는 편한 점이 있다.

 

 

2. Package의 간단 정리

 패키지는 모듈을 폴더로 구분하여 관리하는 것을 의미한다.

User 폴더 안에 cal.py라는 모듈의 plus 함수를 사용한다고 가정한다면 대표적으로 2가지의 방법이 있다.

 

1) import 사용

EX) import user.cal

       print(cal.plus(3,4))

위 방법을 사용한다면 코드 내에 계속적으로 모듈명. 함수명을 이용해야 하는 불편함이 있다.

 

2) From import 사용

Ex) From user.cal import plus

      print(plus(3,4))

# cal.plus()라고 적어주지 않아도 되는 편리함이 있다.

그러나 주의할 점은 main 함수와, cal의 함수 안에 이름이 겹치는 함수명이 있으면 안 된다.

 

 

3. Numpy의 간단 정리

Numerical python의 약어로 python에서 대규모 다차원 배열을 다룰 수 있게 도와주는 라이브러리를 말한다.

Numpy는 반복문 없이 배열 처리가 가능하고, 메모리를 효율적 사용 가능하다는 장점이 있다.

리스트의 배열 생성과 Numpy의 생성의 차이점이 있는데 아래의 예시를 보면 쉽게 이해할 수 있다.

 

<리스트 배열 생성>                                                                <Numpy 생성>

List_arr = list(range(5))                                                      Import numpy as np

실행결과 : [0,1,2,3,4] -> 콤마로 구분(리스트)                        np_arr = np.array(range(5))

                                                                                             실행결과 : [0 1 2 3 4] -> 공백으로 구분 (배열)

 

<여기서 잠깐 배열의 데이터 타입에 대해 예시로 알아보자!>

1) Dtype파이썬 리스트와 달리 같은 데이터 타입만 저장 가능

Arr = np.array([0,1,2,3,4], dtype=float)

print(arr)                          # [0. 1. 2. 3. 4.] ->float의 배열을 나타낸 것

print(arr.dtype)               # ‘float64’   

print(arr.astype(int))      # [0 1 2 3 4] -> 실수형을 정수형 타입으로 변환할 수 있다.(int, float , str , bool 등 의 종류가 가있다.)

 

 

2) Ndarray의 차원 관련 속성 : ndim&shape

list = [0,1,2,3]

arr=np.array(list)

print(arr.ndim)     # 1차원 

print(arr.shape)   # (4,) ->  4개의 값이 1개의 행으로 표현

 

list =  [[0,1,2],[3,4,5]]

arr = np.array(list)

print(arr.ndim).    # 2차원

print(arr.shape).  # (2,3) -> 2개의 행이 3열로 표현

 

+ ndarray의 크기 속성과 shape 조절 가능

Arr = np.array([0,1,2,3,4,5])

print(“ arr.shape : {}”. format(arr.shape))      #arr. shape :(6,) -> 6개의 값이 1 개의 행으로 표현

print(“ 배열 요소의 수 : {}”. format(Arr.size))   #배열 요소의 수 : 6

print(“ 배열의 길이 : {}”. format(len(arr)))        #배열의 길이 : 1

Arr.shape = 3,2                                                # 배열 요소의 :6 , 배열의 길이

 

 

3) 배열 안의 값을 출력하는 여러 가지 4가지 방법

 

1. Indexing - 인덱스를 통해 값을 찾아내는 방식

x=np.arrange(7)

print(x)                             # [0 1 2 3 4 5 6]

x [0] = 10                          # [10 1 2 3 4 5 6]

Np.arrange(1,13,1)          # 1~12까지 1씩 증가하는 2차원 배열

x.shape=3,4                    # 2 3 

 

2. Slicing - 인덱스의 값으로 배열의 일부분을 가져오는 방식

x= np.arrange(1, 13, 1)

x.shape = 3,4                  # 2행 3열

print(x [1:2, :2:3])            #  :2:3   -> 열에서 0,1 중 +3 간격으로 선택

 

3. Boolean indexing - 배열의 각 요소 선택 여부를 Boolean Mask를 이용하여 지정하는 방식

조건에 맞는 데이터 가져오고 , 데이터의 참/거짓을 밝혀준다.

Boolean Mask ->true, false로 구성된 mask array를 의미한다.         

x= np.arrange(7)

print(x < 3)              # [T T T F F F F]

print(x [x < 3])        # [0 1 2]

 

4. Fancy indexing - 배열의 각 요소 선택을 index 배열을 전달하여 지정하는 방식

 

x= np.arrange(7)

print(x[[1,3,5]])  인덱스 위치에 있는 것       #[ 1 3 5 ]

x=np.arrange(1, 13, 1). reshape(3,4)

print(x[[0,2]])                                            #0번째 행, 2번째 행  

print(x[[0,2],2])                                         #0,2번째 행중 2번째열만 선택

 

< 1,2,3,4의 방식들을 표현하여 예시를 들어보면 >

import numpy as np

 

matrix = np.arrange(1, 13, 1). reshape(3, 4)

print(matrix)

 

# 1. Indexing을 통해 값 2를 출력

answer1 = matrix[[0],1]

 

# 2. Slicing을 통해 매트릭스 일부인 9, 10을 가져와 출력

answer2 = matrix [2:,:2]

 

# 3. Boolean indexing을 통해 5보다 작은 수를 찾아 출력

answer3 = matrix [matrix <5]

 

# 4. Fancy indexing을 통해 두 번째 행만 추출하여 출력

answer4 = matrix[[1]]