본문 바로가기

파이썬/파이썬 머신러닝 완벽 가이드

넘파이 배열 ndarray의 기본 개념 정리

반응형

1> ndarray 소개

 #  ndarray: N 차원(Dimension) 배열 (Array) 객체

    1차원 [1,2,3,4]

    2차원 1차원을 요소로 가짐 [[1,2,3,4],[5,6,7,8]]

    3차원 2차원을 요소로 가짐

 #  ndarray 생성

    np.array() 함수로 생성

    인자로 주로 파이썬 list 또는 ndarray입력

    import numpy as np

    array1 = np.array([1,2,3])

 #  ndarray 형태(shape)와 차원

    형태는 ndarray.shape 속성으로, 차원은 ndarray.ndim 속성으로 알 수 있음

    [[1,2,3],[4,5,6]]의 shape는 (2,3)임 (행,열)

    [1,2,3]의 shape는 (3,)

 ndarray 타입(type)

    숫자 값, 문자열 값, 불 값 등 모두 가능

    숫자형 - int형(8bit, 16bit, 32bit), unsigned int형(8bit, 16bit, 32bit), float형(16bit, 32bit, 64bit, 128bit), complex타입(더 큰 숫자값)

    ndarray 내의 데이터타입은 한가지만 가능

    ndarray.dtype 함수로 확인 가능

   np.array([1, 0.9])으로 할 경우  더 큰 값인 float가 됨

 #  ndarray type 변환 - 대용량 데이터 다룰 시 메모리 절약을 위해 형변환을 고려함

    astype() 이용

    arrayId = [1.0, 2.0]

    arrayId_int = arrayId.astype("int32")   arrayId.astype(np.int32)

 

 

2> numpy ndarray의 axis 축 이해

 #  ndarray의 axis 축

     ndarray의 shape는 행, 열, 높이 단위가 아닌 axis 단위로 부여됨. Shape(axis0,axis1,axis2,....)

 

    

3> ndarray 초기화 방법과 ndarray차원과 크기를 변경하는 reshape()의 이해

 #  ndarray를 편리하게 생성하기 - arange, zeros, ones

    np.arange(10) => [0,1,2,3,4,5,6,7,8,9]

    np.arange(start=1,stop=10) => [1,2,3,4,5,6,7,8,9] 

    np.zeros((3,2),dtype = 'int32') => [[0,0],[0,0],[0,0]]

    np.ones((3,2)) => [[1.,1.],[1.,1.],[1.,1.]]     // dtype을 안적어주면 기본 float64

 #  ndarray의 차원과 크기를 변경하는 reshape()

    reshape(2,5)      // reshape((2,5))도 가능

    reshape(-1,x)  -1에 해당하는 크기는 가변적, x에 해당하는 axis 크기는 x로 고정 x가 안나눠떨어지면 오류

    reshape(-1,) 1차원으로 변환

 

 

4> ndarray 인덱싱(Indexing)의 이해

 #  ndarray의 데이터 세트 선택하기 - 인덱싱(Indexing)

    1)  특정 위치의 단일값 추출

      array[3] array[-1]- 역순으로 1번 array[0,0]

    2)  슬라이싱 (Slicing)

      array[0:3]- 0에서부터 3개  array[:] -전체   array[1:2,0:3]-행이 1부터 2개 열이 0부터 3개 

    3)  팬시 인덱싱 (Fancy Indexing) - 인덱스 집합을 지정 - 해당 인덱스에 해당하는 ndarray를 반환

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

      array1[[2,4,7]]= [3,5,8]

      array2d= [[1,2,3],[4,5,6],[7,8,9]]        arrat2d[  [0,1], 2] = [3,6]

    4)  불린 인덱싱 (Boolean Indexing) - 조건 true값만 반환

      array[array>5]

 

 

5> ndarray의 sort와 argsort

 #  배열의 정렬 -  sort() 와 argsort()

    1) sort()

      new = np.sort(ndarray) : 인자로 들어온 원 행렬은 그대로 유지한 채 원 행렬의 정렬된 행렬을 반환

      ndarray.sort()는 원 행렬 자체를 정렬한 형태로 변환하며 반환 값은 none

      둘다 기본적으로 오름차순 , 내림차순은 [::-1]

      np.sort()[::-1]

     * 2차원 배열에서 axis 기반의 sort()

      np.sort(A.axis=0)    np.sort(A.axis=1)  // axis=0일땐 열끼리 axis=1일땐 행끼리 정렬

    2) argsort() - 원본 행렬 정렬 시 정렬된 원래 인덱스를 필요로 할 때 원본 행렬 인덱스를 반환

      array = [3,1,9,5]  np.argsort(array) = [1,0,3,2]

      * key-value로 많이 쓰임

      import numpy as np
      name_array = np.array(['John', 'Mike', 'Sarah', 'Kate', 'Samuel'])
      score_array= np.array([78, 95, 84, 98, 88])
      sort_indices_asc = np.argsort(score_array)
      print('성적 오름차순 정렬 시 score_array의 인덱스:', sort_indices_asc)
      print('성적 오름차순으로 name_array의 이름 출력:', name_array[sort_indices_asc])

      // 결과 : 성적 오름차순으로 name_array의 이름 출력: John, Sarah, Samuel, Mike, Kate

 

 

6> ndarray의 내적과 전치행렬

 # 선형대수 연산 - 행렬 내적

    np.dot(A,B)

 # 선형대수 연산 - 전치 행렬

    np.transpose(A) - 행과 열을 바꿈

반응형