#2. Numpy2

leeby.dev·2022년 3월 16일
0

MachinLearning

목록 보기
3/3

220315_Numpy 배운 내용!

  1. Numpy module
  2. 다차원배열, 2차원 matrix 연산을 쉽고 빠르게 하기 위해서 사용
  3. ndarray
  4. ndarray의 특징, 속성
  5. ndarray의 생성방법 -> 난수 관련된 것은 외우자!
  6. random관련된 생성방법과 특수한 기능들(메소드들)
  7. indexing, slicing => 자유자재로 다룰 수 있도록 해야함!
    => boolean indexing, fancy indexing 은 꼭 기억하도록!

223016_Numpy를 이어서 배워보자

ndarray의 사칙연산(일반적인 연산)

# ndarray의 사칙연산(일반적인 연산)
# ndarray의 shape이 같아야함

import numpy as np

# shape이 같음
arr1 = np.array([1,2,3]) # (3,)
arr2 = np.array([4,5,6]) # (3,)
print(arr1 + arr2)       # [5 7 9] // 같은 위치에 있는 것 끼리 연산이 됨!

'''
# shape이 다름
arr1 = np.array([1,2,3,4]) # (4,)
arr2 = np.array([4,5,6])   # (3,)
print(arr1 + arr2)         # shape이 다르니까 오류임!
'''

# shape이 다를때도 shape을 맞출 수 있으면 연산이 가능
#                  => broadcasting : 두 개의 ndarray의 shape을 똑같이 맞충
arr1 = np.array([1,2,3,4]) # (4,)
print(arr1 + 1)            # [2 3 4 5] // 1 => [1,1,1,1] broadcasting


# 다양한 경우
'''
arr1 = np.array([1,2,3,4,5,6]) # (6,)
arr2 = np.array([4,5,6])       # (3,)
arr1 + arr2                    # shape이 다르니까 오류임!
'''

arr1 = np.array([[1,2,3],[4,5,6]]) # (2,3)
arr2 = np.array([4,5,6])           # (3,) => 1차원이 2차원으로 broadcasting 되어 연산이 가능해짐
arr1 + arr2                        # array([[ 5,  7,  9],
                                   #        [ 8, 10, 12]])

# 형렬곱연산(matrix 곱연산)
arr1 = np.array([[1,2,3],[4,5,6]])     # (2,3)
arr2 = np.array([[4,5], [6,7], [8,9]]) # (3,2) 
# 행렬곱 연산의 결과는 (2,2)
print(np.matmul(arr1, arr2))           # [[ 40  46]
                                       # [ 94 109]]
                                       
                                    
# 전치행렬(transpose)
arr = np.array([[1,2,3], [4,5,6]])  # (2,3)
print(arr)
print(arr.T) # (3,2)                                       

iterator(반복자)를 이용한 반복문 처리

# iterator(반복자)를 이용한 반복문 처리
# 일반적으로 for문을 이용해서 반복처리를 하는데,
# ndarray는 while문과 iterator를 이용해서 반복처리 하는 방식을 선호함

arr = np.array([1,2,3,4,5]) # (5,)
print(arr)

# for문을 이용한 반복처리
'''
for tmp in arr:
    print(tmp)
'''

# 1차원 ndarray에 대해서 iterator를 이용해 반복처리
arr = np.array([1,2,3,4,5]) # (5,)

# 1. iterator 객체를 하나 얻어옴
# iterator 객체로부터 index를 추출할 수 있음
my_iter = np.nditer(arr, flags=['c_index'])

while not my_iter.finished:
    idx = my_iter.index
    print(arr[idx]) # 출력
    my_iter.iternext()

2차원 ndarray에 대해서 iterator(반복자)를 이용한 반복문 처리

# 2차원 ndarray에 대해서 iterator를 이용해 반복처리

arr = np.array([[1,2,3], [4,5,6]]) #(2,3)
'''
for tmp1 in range(arr.shape[0]):
    for tmp2 in range(arr.shape[1]):
        print(arr[tmp1, tmp2])
'''

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

my_iter = np.nditer(arr, flags=['multi_index'])

while not my_iter.finished:
    idx = my_iter.multi_index
    print(idx)
    print(arr[idx])
    my_iter.iternext()

다양한 집계함수와 axis개념

# 다양한 집계함수와 axis개념
arr = np.arange(1,7,1).reshape(2,3) # reshape(2,3) => 2행 3열 views를 보여줌!
print(arr)    # [[1 2 3]
              # [4 5 6]]

# ndarray 데이터에 대한 합을 구할 수 있음
print(np.sum(arr))  # 21   => Numpy가 제공하는 함수를 이용
print(arr.sum())    # 21   => ndarray가 가지고 있는 메소드를 이용
print(arr.mean())   # 3.5
print(arr.max())    # 6
print(arr.min())    # 1
print(arr.argmax()) # 5  // 가장 큰 값이 어디있는지 인덱스 값을 알려줌
print(arr.std())    # 1.707825127659933  // 표준편차


# axis 개념(축)
# numpy는 집계함수를 이용할 때 axis를 명시하지 않으면 전체를 대상으로 연산 수행
arr = np.arange(1,7,1).reshape(2,3) # reshape(2,3) => 2행 3열 views를 보여줌!
print(arr)    # [[1 2 3]
              # [4 5 6]]
    
print(arr.sum())         # 21
print(arr.sum(axis=0))   # [5 7 9]
print(arr.sum(axis=1))   # [ 6 15]

간단한 연습문제!

# 간단한 연습문제
arr = np.arange(1,17,1).reshape(4,4)
print(arr)

# 이 안에 10보다 큰 수는 몇개 있나요?
# boolean indexing 이용
# 내 풀이
tmp = (arr > 10)
print(arr[tmp])
(arr[tmp]).size

# 선생님 풀이
print((arr>10).sum())

[정렬, 연결, 삭제, csv파일 로딩]
일반적으로 ndarray로 이 작업들을 하지 않습니당!
pandas로 처리합니다!

Numpy는 여기까지! :D


profile
내가.. 개발자?! ㅇ0ㅇ

0개의 댓글