[Numpy] 기본 사용 함수 및 사용 방법

원준·2023년 5월 22일

데이터 분석 - Python

목록 보기
3/12

1. 기능

1) 벡터화

  • for문을 작성하지 않고 데이터를 일괄처리 하는 것.
  • 실제 행렬 처럼 계산이 된다.
arr = np.array([[1,2,3],[4,5,6]])
# array([[1, 2, 3],
#        [4, 5, 6]])

arr + arr
# array([[ 2,  4,  6],
#       [ 8, 10, 12]])

arr / arr
#array([[1., 1., 1.],
#       [1., 1., 1.]])

2) 브로드 캐스팅

  • 다른 모양의 배열간의 산술 역산을 수행할 수 있도록 해주는 기능
arr = np.array([[1,2,3],[4,5,6]])

10 - arr
#array([[9, 8, 7],
#       [6, 5, 4]])

arr * 3
#array([[ 3,  6,  9],
#       [12, 15, 18]])

arr / 3
#array([[0.33333333, 0.66666667, 1.        ],
#       [1.33333333, 1.66666667, 2.        ]])

arr2 = np.array([100,200,300])
arr + arr2
#array([[101, 202, 303],
#       [104, 205, 306]])
  • list 자체로 객체를 가져서 계산이 안되지만, numpy는 공간 각각의 객체를 가진다.
lst = list(range(6))
#[0, 1, 2, 3, 4, 5]

lst[2:5] = -1 # 2~5사이의 값을 -1로 변경하려 하지만 에러가 발생한다.
# Error

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

arr1d[3:6] = -1 # numpy는 3~5구간의 값을 -1로 변경이 가능하다.
# array([ 0,  1,  2, -1, -1, -1,  6,  7])

3) dtype

  • 배열에 담긴 원소의 자료형을 알아낸다.
    arr.dtype
    #dtype('int64')

4) size

  • 배열에 잇는 원소의 천체 갯수

    # array([[1, 2, 3],
    #        [4, 5, 6]])
    arr.size
    
    # 6개

5) ndim

  • 배열의 차원 개수

    # array([[1, 2, 3],
    #        [4, 5, 6]])
    arr.ndim
    
    # 2차원

6) shape

  • 가장 많이 쓰는 옵션

  • 행과 열을 튜플의 형식으로 나타낸다.

    # array([[1, 2, 3],
    #        [4, 5, 6]])
    arr.shape
    
    # (2, 3)

7) lispace()

  • 원하는 범위안에 원하는 갯수만 나오도록 할 수 있다.

    np.lispace(0, 1, 6)
    # 0~1 까지 6개만 나오도록 반환해라.
    
    # array([0. , 0.2, 0.4, 0.6, 0.8, 1. ])

8) zeros()

  • 모든 값이 0인 numpy를 만든다.

    np.zeros(5)
    
    # array([0., 0., 0., 0., 0.])
    
    # 2차원도 가능하다.
    np.zeros((3, 2))
    
    #array([[0., 0.],
    #      [0., 0.],
    #      [0., 0.]])

9) ones()

  • 모든 값이 1인 numpy를 만든다.

    np.ones(5)
    
    # array([1., 1., 1., 1., 1.])

10) choice()

  • 배열의 값중 랜덤으로 원하는 수만큼 반환한다.

    data = [1,2,3,4,5,6,7]
    np.random.choice(data, 3)
    # data에서 랜덤으로 3개를 가져와라
    
    # array([7, 2, 4])

11) seed()

  • 난수 초기값 부여한다.
    - 계속해서 랜덤으로 나오는 값에 대해 정해진 값만 나오도록 제한할 수 있다.
    np.random.seed(42)

12) reshape()

  • 이미 존재하는 배열을 내가 원하는 대로 shape을 조정할 수 있다.

    • 해당 함수를 사용할 시 1차원에서 2차원으로도 가능하다.
    arr = np.arange(12)
    
    #array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
    
    # (3, 4) / 3행 4열로 변환
    arr.reshape(3, 4)
    # 같은 결과를 보여준다.
    	# -1을 넣으면 나머지 수는 자동으로 찾아줌 (한개만 가능)
    arr.reshape(3, -1)
    
    #array([[ 0,  1,  2,  3],
    #     [ 4,  5,  6,  7],
    #     [ 8,  9, 10, 11]])
    
    # .T 옵션으로 위치를 변경한다.
    arr.T
    
    #array([[ 0,  4,  8],
    #     [ 1,  5,  9],
    #     [ 2,  6, 10],
    #     [ 3,  7, 11]])

13) 불리안 배열

  • Boolean array
  • boolean을 이용해 원하는 값만 들고 올 수 있다.
arr = np.array([0,2,3,4,5])
# array([0,2,3,4,5])

# 0, 1, 3 번째의 값만 들고 올 수 있다.
arr[[True,False, True,False, True]]
# array([0, 3, 5])

14) 유니버설 함수 (지수함수 변환)

  • 밑이 자연상수 e인 지수함수(e^x)로 변환해준다.

    arr = np.arange(-3, 3).reshape(3, -1)
    #array([[-3, -2],
    #      [-1,  0],
    #      [ 1,  2]])
    
    np.exp(arr) # x^arr로 변환
    #array([[0.04978707, 0.13533528],
    #      [0.36787944, 1.        ],
    #      [2.71828183, 7.3890561 ]])

15) floor

  • 모든 행렬의 소수점을 버린다.

    arr = np.arange(-3, 3).reshape(3, -1)
    #array([[-3, -2],
    #      [-1,  0],
    #      [ 1,  2]])
    
    np.floor(np.exp(arr))
    #array([[0., 0.],
    #      [0., 1.],
    #      [2., 7.]])

17) where 조건

  • if-else의 벡터화 버전이다.

  • numpy를 사용하여 배열을 빠르게 처리할 수 있으며, 다차원도 간결하게 표현이 가능하다.

    xarr = np.array([100,200,300,400])
    yarr = np.array([1,2,3,4])
    cond = np.array([True, False, True, False])
    
    # where(조건, 참일때, 거짓일때)
    result = np.where(cond, xarr, yarr)
    # array([100,   2, 300,   4])
    
    np.where(xarr>200, max(xarr), 0)
    # array([  0,   0, 400, 400])
profile
공부해보자

0개의 댓글