본문 바로가기
데이터분석/넘파이

01. 넘파이(Numpy)

by 사라리24 2024. 5. 22.
SMALL


넘파이(Numpy)

 

  • 넘파이(Numpy)는 파이썬에서 사용되는 과학 및 수학 연산을 위한 강력한 라이브러리
  • 주로 다차원 배열을 다루는 데에 특화되어 있어, 데이터 분석, 머신러닝, 과학 계산 등 다양한 분야에서 널리 사용
  • 넘파이 배열은 C 언어로 구현되어 있어 연산이 빠르고 효율적
  • 넘파이 배열은 특히 큰 데이터셋에서 수치 연산을 수행할 때 뛰어난 성능을 보입
  • 또한 메모리 사용을 최적화하고 효율적으로 관리합니다

 

  • 설치
  
     ! pip install numpy 
  

 

  • import
      
      import  numpy as np #별칭 사용
 

 

 

 

1. ndarray ( n-dimensional array)

  • 다차원 배열 
  • ndarray 은 생성 될 때 크기 자료형이 결정된다. (다만, 자료형은 동일해야 함)
  • 다차원 배열은 1차원, 2차원, 3차원 등 다양한 차원을 가질 수 있다.
    * 
    다양한 수학적 연산 지원
    * 메모리 내에서 연속적 저장 : 빠른 계산 가능

 

  • 리스트의 경우
  
 
          # 리스트
          list1 = [1, 2, 3, 4]
          list2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
          print(list1)
          print(list2)
          print(type(list1))
          print(type(list2))
          print(type(list1[0]))
          print(type(list2[0]))
 
  

 

 

  • 넘파이의 경우_1차원
 

        import numpy as np
 
        # ndarray
        # 1차원 배열
        ndarr1 = np.array([1, 2, 3, 4])
        print(ndarr1)
        print(type(ndarr1))
        print(type(ndarr1[0]))
 
 
  


✔ 넘파이 생성


변수 = 넘파이별칭.array

 

 

  • 넘파이의 경우_2차원
  
 
        # 2차원 배열
        ndarr2 = np.array([[1, 2, 3], [4, 5, 6]])
        print(ndarr2)
        print(type(ndarr2))
        print(type(ndarr2[0]))
 
  

 

2. List와 ndarray변환

  • 데이터 타입을 다른 데이터 타입으로 변환할 수 있다
  • 리스트에서 배열로의 변환은 np.array() 함수를 사용하고
    배열에서 리스트로의 변환은 tolist() 함수를 사용

 

  • np.array( )
 


        # 리스트를 nparray로 변환
        list1 = [1, 2, 3, 4]
        ndarr1 = np.array(list1)
        print(ndarr1)
        print(type(ndarr1))
 
 
  


✔ 넘파이 변환 방법

넘파이 = 별칭.array (리스트)

 

  • tolist( )
  
 
 
        # ndarray를 리스트로 변환
        list2 = ndarr1.tolist()
        print(list2)
        print(type(list2))
 
  


 ✔ 리스트 변환 방법

리스트 = 넘파이.tolist()

 

3. ndarray의 데이터 타입


- 넘파이의 ndarray는 동일한 자료형을 가지는 원소들로 이루어져 있으며, 다양한 데이터 타입을 지원

 

  • 리스트의 경우: 다양한 데이터타입을 저장할 수 있음
 

        list1 = [1, 3.14, 'Python', '😎', True]
        print(list1)
        print(type(list1[0]))
        print(type(list1[1]))
        print(type(list1[2]))
        print(type(list1[3]))
        print(type(list1[4]))

      

 

 

  • 넘파이의 경우 : 동일한 자료형만 가능

        # 같은 자료형
        ndarr1 = np.array([1, 2, 3, 4])
        print(ndarr1)
        print(type(ndarr1))
        print(type(ndarr1[0]))
        print(type(ndarr1[1]))
 

 

  • 넘파이의 경우 : 자동형변환(1)
 
 
           #int와 float 동시에 있는 경우
          ndarr2 = np.array([1, 2, 3.14, 4])
          print(ndarr2)
          print(type(ndarr2))
          print(type(ndarr2[0]))
          print(type(ndarr2[2]))

  


모든 요소가 float로 바뀜

 

  • 넘파이의 경우 : 자동형변환(2)

        # int와 float, boolen 동시에 있는 경우
        ndarr3 = np.array([1, 2, 3.14, True])
        print(ndarr3)
        print(type(ndarr3))
        print(type(ndarr3[0]))
        print(type(ndarr3[1]))
        print(type(ndarr3[2]))
   
  



가장 큰 데이터타입인 float로 모든 요소가 바뀜

(Bool은 데이터 타입이 가장 작음)

 

  • 넘파이의 경우 : 자동형변환(3)
 

          # 문자형이 있는 경우
          ndarr4 = np.array(['1', 2, 3.14, True])
          print(ndarr4)
          print(type(ndarr4))
          print(type(ndarr4[0]))
          print(type(ndarr4[2]))
          print(type(ndarr4[3]))

      


가장 큰 데이터 타입인 str로 모든 요소가 바뀜

 

  • 넘파이의 경우 : 자동형변환(4)
 
 

        # 데이터 타입 지정(1)
        ndarr5 = np.array([1, 2, 3.14, True], dtype=int) # 모든 요소를 int로 변경
        print(ndarr5)
        print(type(ndarr5[0]))
        print(type(ndarr5[1]))
        print(type(ndarr5[2]))
        print(type(ndarr5[3]))

 
  



지정해준 int 요소로 모두 바뀜

단, float형은 소수점 뒤를 빼고 정수만 남음

 

  • 넘파이의 경우 : 자동형변환(5)
 
 
        # 데이터 타입 지정(2)
        ndarr6 = np.array(['1', 2, 3.14, True], dtype=int)
        print(ndarr6)
        print(type(ndarr6[0]))
        print(type(ndarr6[1]))
        print(type(ndarr6[2]))
        print(type(ndarr6[3]))

  


따옴표가 있는 int형은 int로 변환 가능!

 

  • 넘파이의 경우 : 자동형변환(6)
 
 
        # 데이터 타입 지정(3)
      ndarr7 = np.array(['1', '2', '3.14', True], dtype=int)
        print(ndarr6)
        print(type(ndarr6[0]))
        print(type(ndarr6[1]))
        print(type(ndarr6[2]))
        print(type(ndarr6[3]))

  


따옴표가 있는 float형은 int로 변환되지 않음!

 

  • 넘파이의 경우 : 자동형변환(7)
  
 
        ndarr8 = np.array(['1', 2, 3.14, 'True'], dtype=int)
        print(ndarr8)
        print(type(ndarr8[1]))
 
  



int로 추론할수 없는 경우 error 발생

 

 

4. ndarray 인덱싱과 슬라이싱

 

- 넘파이의 ndarray는 리스트와 유사하게 인덱싱과 슬라이싱을 지원

 

  • 1차원_차원보기
 
 
        # ndarray 인덱싱과 슬라이싱
        ndarr1 = np.array([ '🍉','🍋','🍌', '🍍','🍓'])
        print(ndarr1)
        print(ndarr1.shape) # 차원
 
 
  



✔ 차원보기
넘파이.shape

(5,) : 5행(5개의 데이터가 있다)

 

  • 1차원_인덱싱
  
        # 인덱싱
        print(ndarr1[0])
        print(ndarr1[4])
        print(ndarr1[-1])
        print(ndarr1[-2])
  


원하는 인덱스 가져오기

 

  • 1차원_슬라이싱
 
     
        # 슬라이싱
        print(ndarr1[0:3])
        print(ndarr1[2:])
        print(ndarr1[:3])
 
 
 


- 인덱스 0~2까지
- 인덱스 2~끝
- 인덱스 처음~3

 

  • 2차원_차원보기
  
 
          # 2차원 배열인 경우
          ndarr2d = np.array([[1, 2, 3, 4],
                                                  [5, 6, 7, 8],
                                                  [9, 10, 11, 12]])
          print(ndarr2d)
          print(ndarr2d.shape)
 
 
  


✔ 차원보기
넘파이.shape

(3,4) : 3행 4열(12개의 데이터가 있다)

 

  • 2차원_인덱싱(행)
 

        # 0행 가져오기
        print(ndarr2d[0])
        print(ndarr2d[0,])
        print(ndarr2d[0,:])
 
  



✔ 0행 가져오기
넘파이[0]
넘파이[0,]
넘파이[0,:]


* 세가지 방법 가능

 

  • 2차원_인덱싱(열)
  
 
        # 0열 가져오기
        print(ndarr2d[:,0])
 
  


✔ 0열 가져오기
넘파이[:.0]

*  열을 가져오는 방법은 1가지!

 

 

5. Fancy Indexing

  • 넘파이에서 배열을 인덱싱하는 강력하고 유연한 방법 중 하나
  • 정수 배열이나 불리언 배열을 사용하여 배열의 일부를 선택하는 방법
  • 이를 통해 여러 개의 요소를 한 번에 선택하거나 조건에 맞게 선택할 수 있다

 

  • 1차원
  
 
        # Fancy Indexing
        # 1차원
        ndarr1 = np.array([10, 15, 2, 8, 20, 90, 85, 44, 23, 32])
        idx = [2, 5, 9]
        print(ndarr1[idx])
 
  


- idx (인덱스를 나타내는 리스트)
   : ndarr1 배열에서 선택할 요소의 인덱스를 나타냅니다.

 

 

  • 2차원
 
 
        # 2차원
        ndarr2d = np.array([[1, 2, 3, 4],
                                                 [5, 6, 7, 8],
                                                 [9, 10, 11, 12]])
        print(ndarr2d[[0,1], :])
 
 
  


❔ 넘파이[[0,1],:]

[[0,1],__]  :  1행~2행을 조건에 맞게 출력
[___,   :   ]  :  조건-모든 열을 선택

 

6. Boolean Indexing

  • 넘파이에서 배열의 원소를 선택하는 강력하고 유용한 방법 중 하나
  • 불리언(Boolean) 값으로 이루어진 배열을 사용하여 조건을 충족하는 원소만 선택하는 방식

 

  • 1차원_Boolean 인덱싱
  
 
          # Boolean Indexing
          ndarr1 = np.array([ '🍉','🍋','🍌', '🍍','🍓'])
          sel = [True, False, True, True, False]
          print(ndarr1[sel])
 
 


True인 것만 출력

 

  • 1차원_Boolean 인덱싱(오류)
 
          # Boolean Indexing
          ndarr1 = np.array([ '🍉','🍋','🍌', '🍍','🍓'])
          sel = [True, False, True]
          print(ndarr1[sel])
 
 



단, 자리숫가 안 맞으면 error

 

  • 2차원 _Boolean 인덱싱
  
 
        # Boolean Indexing
        # 2차원인 경우
        ndarr2d = np.array([[1, 2, 3, 4],
                                                 [5, 6, 7, 8],
                                                 [9, 10, 11, 12]])
        print(ndarr2d > 7) # true, false 인지 판별
        print('=' * 40)
        print(ndarr2d[ndarr2d > 7])
 
  


조건에서 true 인 것들만 출력

 

'데이터분석 > 넘파이' 카테고리의 다른 글

02. 행렬연산  (0) 2024.05.22