ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NumPy 한번에 끝내기 04 - 데이터 과학 핵심 도구 (연산 함수/정렬/입출력)
    빅데이터/NumPy 2022. 1. 18. 19:25

    유투버 '이수안 컴퓨터 연구소'님 강의 참조

     

     

     

     

    01 집계 함수

    # sum() : 합계
    a2 = np.random.randint(1, 10, size=(3,3))
    print(a2)
    print(a2.sum(), np.sum(a2))
    print(a2.sum(axis=0), np.sum(a2,axis=1))
    
    [[3 3 1]
     [1 9 8]
     [6 1 2]]
    34 34
    [10 13 11] [ 7 18  9]
    
    
    # cumsum() : 누적합 계산
    print(a2)
    print(np.cumsum(a2))
    print(np.cumsum(a2, axis=1))
    print(np.cumsum(a2, axis=0))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    [ 6  8 10 19 27 33 34 35 43]
    [[ 6  8 10]
     [ 9 17 23]
     [ 1  2 10]]
    [[ 6  2  2]
     [15 10  8]
     [16 11 16]]
     
     
     # diff() : 차분 계산
    print(a2)
    print(np.diff(a2))
    print(np.diff(a2, axis=1))
    print(np.diff(a2, axis=0))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    [[-4  0]
     [-1 -2]
     [ 0  7]]
    [[-4  0]
     [-1 -2]
     [ 0  7]]
    [[ 3  6  4]
     [-8 -7  2]]
     
     
     # prod() : 곱 계산 / cumprod : 누적 곱 계산
    print(a2)
    print(np.prod(a2))
    print(np.prod(a2, axis=1))
    print(np.prod(a2, axis=0))
    print(np.cumprod(a2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    82944
    [ 24 432   8]
    [54 16 96]
    [    6    12    24   216  1728 10368 10368 10368 82944]
    
    
    # dot()/matmul() : 점곱/행렬곱 계산
    print(a2)
    b2 = np.ones_like(a2)
    print(b2)
    print(np.dot(a2,b2))
    print(np.matmul(a2, b2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    [[1 1 1]
     [1 1 1]
     [1 1 1]]
    [[10 10 10]
     [23 23 23]
     [10 10 10]]
    [[10 10 10]
     [23 23 23]
     [10 10 10]]
     
     
     # tensordot() : 텐서곱 계산 # 축 설정 가능 
    print(np.tensordot(a2, b2))
    
    43
    
    
    # cross() : 벡터곱
    x = [1,2,3]
    y = [4,5,6]
    print(np.cross(x,y)) 
    # 6 * 2 - 3 * 5 / 3 * 4 - 6 / 4 * 2 - 5 
    
    [-3  6 -3]
    
    
    # inner()/outer() : 내적/외적
    print(a2)
    print(b2)
    print(np.inner(a2, b2))
    print(np.outer(a2, b2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    [[1 1 1]
     [1 1 1]
     [1 1 1]]
    [[10 10 10]
     [23 23 23]
     [10 10 10]]
    [[6 6 6 6 6 6 6 6 6]
     [2 2 2 2 2 2 2 2 2]
     [2 2 2 2 2 2 2 2 2]
     [9 9 9 9 9 9 9 9 9]
     [8 8 8 8 8 8 8 8 8]
     [6 6 6 6 6 6 6 6 6]
     [1 1 1 1 1 1 1 1 1]
     [1 1 1 1 1 1 1 1 1]
     [8 8 8 8 8 8 8 8 8]]
    - 축 조정 가능
    
    # mean() : 평균 계산
    print(a2)
    print(np.mean(a2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    4.777777777777778
    
    
    # std() : 표준 편차
    print(a2)
    print(np.std(a2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    3.083208205669246
    
    
    # var() : 분산 계산
    print(a2)
    print(np.var(a2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    9.506172839506172
    
    
    # min() / max() : 최소/최대
    print(a2)
    print(np.min(a2), np.max(a2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    1 9
    
    
    # argmin() / argmax() : 최소/최대값 인덱스
    print(a2)
    print(np.argmin(a2), np.argmax(a2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    6 3
    
    
    # median() : 중앙값
    print(a2)
    print(np.median(a2))
    
    [[6 2 2]
     [9 8 6]
     [1 1 8]]
    6.0

    # percentile() : 백분위 수
    a1 = np.array([0,1,2,3])
    print(a1)
    print(np.percentile(a1, [0,20,40,60,80,100], interpolation='linear')) *'interpolation' 설정 가능
    
    [0 1 2 3]
    [0.  0.6 1.2 1.8 2.4 3. ]
    # any() / all () - 축 조정 가능
    # - 배열 위치에 하나라도 True가 있으면 True (any)
    # - 배열 위치에 모두가 같아야 True
    
    a2 = np.array([[False, False, True],
                 [True, True, True],
                   [False, True, True]])
    print(np.any(a2))
    print(np.all(a2))
    
    True
    False

     

     

    02 비교 연산

    • 비교연산자를 써서 배열을 비교 한다. 다른 연산과 다른 특이점은 없다. 또한 차원에 대한 제한도 없다. 
    # 비교 연산 
    a1 = np.arange(1, 10)
    print(a1)
    print(a1 == 5)
    print(a1 != 5)
    print(a1 < 5)
    
    [1 2 3 4 5 6 7 8 9]
    [False False False False  True False False False False]
    [ True  True  True  True False  True  True  True  True]
    [ True  True  True  True False False False False False]
    • 비교 범용 함수 또한 존재. 아래와 같이 쓰면 된다. 

     

     

     

     

    03 배열 정렬

    a1 = np.random.randint(1, 10, size=10)
    print(a1)
    print(np.sort(a1))
    print(np.argsort(a1)) #배열 내 값을 오름차순으로 하는 위치를 반환
    
    [8 9 1 7 2 4 5 9 3 2]
    [1 2 2 3 4 5 7 8 9 9]
    [2 4 9 8 5 6 3 0 1 7]
    
    
    # partition() : 배열에서 k개의 작은 값을 반환 , 축 및 차원 조정 가능 
    a1 = np.random.randint(1, 10, size=10)
    print(a1)
    print(np.partition(a1, 3)) #partition(배열, 이값보다 작은 값 출력) - default 로 3개를 맨 앞에 출력
    
    [5 2 1 3 3 9 3 6 3 3]
    [1 2 3 3 3 3 9 6 3 5]

     

     

     

     

    04 배열 입출력

    • 넘파이를 써서 배열을 저장/로드 등을 할 수 있다. 

    a2 = np.random.randint(1, 10, size=(5, 5))
    np.save("a", a2)

Designed by Tistory.