[Python] Numpy


Numpyとは?


Numerical Pythonの略.
科学計算とデータ分析のためのPythonパッケージ

長所

  • メモリを高速かつ効率的に使用し、ベクトルの算術演算とブロードキャスト演算をサポートする多次元配列標準データ型.
  • 複数の標準的な数学関数を提供し、重複文
  • を記述することなく、データアレイ全体に高速演算を提供します.
  • アレイのデータをディスクに書き込みまたは読み取りできます.(ファイルとして保存)
  • 線形代数、乱数発生器、プリー、C/C++ポートバーに変換可能なコードを統合します.
  • Numpyを使用するには、endarrayオブジェクトを作成する必要があります.
    endarrayオブジェクトを使用すると、Pythonで使用されている大きなデータセットをn次元配列で表示できます.

    1)カレンダーの作成


    endarrayオブジェクトはarang()およびarray([])です.
    import numpy as np
    
    A = np.arange(5)
    B = np.array([0,1,2,3,4])  #파이썬 리스트를 numpy ndarray로 변환
    
    C = np.array([0,1,2,3,'4'])
    #'4'가 들어갔다는 이유로, 0,1,2,3이 모두 문자열로 바뀜
    #array는 모든 요소의 type가 동일해야하기 때문
    #문자를 숫자로 바꿀 순 없지만, 숫자는 모든 문자열로 바꿀 수 있기 때문에 모든 문자열로 해석해서 실행
    
    실행값
    A,B = [0 1 2 3 4]
    C = ['0' '1' '2' '3' '4']

    2)寸法方法

  • ndarray.size:マトリクス内の要素の数
  • ndarray.shape:マトリクスの形状
  • ndarray.ndim:マトリクスの軸数
  • 再成形():マトリクス形状を変更する
  • A = np.arange(10).reshape(2, 5)   
    #원소 10개의 ndarray를 2 X 5행렬로 reshape
    #=#길이 10의 1차원 행렬을 2X5 2차원 행렬로 바꿈
    
    print("행렬의 모양:", A.shape)
    print("행렬의 축 개수:", A.ndim)
    print("행렬 내 원소의 개수:", A.size)
    
    실행값
    행렬의 모양: (2, 5) #reshape됨
    행렬의 축 개수: 2 #축은 2개
    행렬 내 원소의 개수: 10 #원소 10개는 동일

    3)内蔵関数タイプ

  • NumPy: numpy.array.dtype
  • Python:type()
  • #Numpy의 원소는 꼭 동일한 데이터type이어야 함.
    
    A= np.arange(6).reshape(2, 3)
    print(A)
    print(A.dtype) #dtype : numpy ndarray의 원소 데이터 타입 반환
    print(type(A)) #행렬 A의 자료형 반환
    print("-------------------------")
    
    B = np.array([0, 1, 2, 3, 4, 5])  
    print(B)
    print(B.dtype)
    print(type(B))
    print("-------------------------")
    
    C = np.array([0, 1, 2, 3, '4', 5])
    print(C)
    print(C.dtype)
    print(type(C))
    print("-------------------------")
    
    D = np.array([0, 1, 2, 3, [4, 5], 6], dtype=object)  
    #[]로 리스트 객체 원소 -> 동일한 데이터 type이 아닌 상황 -> dtype를 object로 지정해, dtype일치시킴
    print(D)
    print(D.dtype) 
    print(type(D))
    
    D실행값
    [0 1 2 3 list([4, 5]) 6]
    object
    <class 'numpy.ndarray'>
    #효율적인 방법으로 type을 변화시켜 관리
    
    C = np.array([0,1,2,3,'4',5])
    print(C[0]) #문자열 0
    print(type(C[0]))
    print(C[4])
    print(type(C[4]))
    print("------------------------------")
    
    D = np.array([0,1,2,3,[4,5],6], dtype=object)
    print(D[0]) #정수 0
    print(type(D[0]))
    print(D[4])
    print(type(D[4]))
    
    실행값
    0
    <class 'numpy.str_'>
    4
    <class 'numpy.str_'>
    ------------------------------
    0
    <class 'int'>
    [4, 5]
    <class 'list'>

    4)特殊行列

  • 単位行列
  • np.eye(3)
    
    실행값 
    array([[1., 0., 0.],
           [0., 1., 0.],
           [0., 0., 1.]])
  • 0マトリックス
  • np.zeros([2,3])
    
    실행값
    array([[0., 0., 0.],
           [0., 0., 0.]])
  • 1マトリックス
  • np.ones([3,3])
    
    실행값
    array([[1., 1., 1.],
           [1., 1., 1.],
           [1., 1., 1.]])

    5)放送演算


    異なるサイズのカレンダー間で算術演算を許可する機能
    A = np.arange(9).reshape(3,3) #9개의 원소, 3x3배열
    A
    array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
           
    
    # ndarray A에 2를 상수배 했을 때,
    A * 2 #각 요소에 *2를 했을 때
    array([[ 0,  2,  4],
           [ 6,  8, 10],
           [12, 14, 16]])
      
      
    # ndarray A에 2를 더했을 때,
    A + 2 #각 요소에 2를 더했을 때
    array([[ 2,  3,  4],
           [ 5,  6,  7],
           [ 8,  9, 10]])
           
           
    # 3 X 3 행렬에 1 X 3 행렬을 더했을 때
    A = np.arange(9).reshape(3,3) #3x3행렬
    B = np.array([1, 2, 3]) #1x3행렬
    print("A:", A)
    print("B:", B)
    print("\nA+B:", A+B)       
    
    A: [[0 1 2]
        [3 4 5]
        [6 7 8]]
    B:  [1 2 3]
    
    A+B: [[ 1  3  5] #0+1, 1+2, 2+3
          [ 4  6  8] #3+1, 4+2, 5+3
          [ 7  9 11]]
          
    #*3x3행렬에 1x2행렬을 더하는 것은 허용되지 않는다
    

    6)スライスとインデックス

    # 3 X 3 행렬의 첫번째 행 구하기
    A = np.arange(9).reshape(3,3)
    print("A:", A)
    B = A[0]
    print("B:", B)
    
    실행값
    A: [[0 1 2]
        [3 4 5]
        [6 7 8]]
    B:  [0 1 2]
    
    print(A[0, 1]) #0,1을 인덱싱하면 A의 첫번째 행에서 두번째 값을 참조
    print(B[1])

    水平軸に沿ってスライド:array[n:n]
    垂直軸に沿ってスライド:array[:,n:n]
    すべて使用:array[n:n,n:n]
    *array[:2]=水平軸0、2番目のインデックスを除くシート
    A[:-1] #인덱스 0부터 인덱스 위치 -1까지의 배열 섹션
    array([[0, 1, 2],
           [3, 4, 5]])
           
    print(A[:,2:]), print(A[:,-1:])
    [[2]
     [5]
     [8]]
     
    print(A[:,1:]), print(A[:,-2:])
    [[1 2]
     [4 5]
     [7 8]]
     
    print(A[:,:]), print(A[:,-3:])
    [[0 1 2]
     [3 4 5]
     [6 7 8]]
     
    A[1,:2]
    array([3, 4])
    
    A[:2, 1:]
    array([[1, 2],
           [4, 5]])
    
    A[:,-1]
    array([2, 5, 8])
    💥グライダーの理解と練習が必要です

    📆 2021-12-31


    📚 FUNDAMENTALS NODE9