NumPy 기초 1 - numpy란, 행렬, 데이터선택, 브로드캐스팅(broad casting), 마스킹(masking)

NumPy 기초  - numpy란, 행렬, 데이터선택, 브로드캐스팅(broad casting), 마스킹(masking)

1. NumPy 알아보기 

      1_ Numpy란? 

      2_ Numpy 사용하기(import) 

     

2. NumPy 배열

      1_ list 데이터로 행렬 데이터를 생성하기

      2_ 행렬의 모양 변경하기 

      3_ 행렬 데이터의 선택 : offset index

      4_ 데이터 수정하기 

      5_ 브로드캐스팅 (broad casting)  &  마스킹(masking)

      6_ 행렬 데이터의 생성 _ zeros / ones 


1.NumPy 알아보기 

1_ Numpy란?

Numpy(넘파이)는 행렬 연산에 있어서 다양한 편의를 제공하는 모듈입니다.

단위는 array로 데이터가 저장됩니다. 

 

특징은 

  • 내부가 속도가 빠른 C로 작성되어있어 연산 속도가 매우 빠릅니다
  • 특히 선형대수학을 빠르게 연산할 수 있습니다 

 

2_ Numpy 사용하기(import) 

import numpy as np

 

2. NumPy 배열

1_ list 데이터로 행렬 데이터를 생성하기 

 

np.array() 괄호안에 list 데이터를 넣어 배열을 형성할 수 있습니다. 

type()을 넣어 데이터 타입을 확인하면, numpy.ndarray 라는 형식으로 데이터 타입이 출력됩니다. 

 

[예제코드] 

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

[결과]

(numpy.ndarray, array([1, 2, 3]))

 

list 를 두번 중첩하여 사용함으로 2차원 배열을 만들 수 있습니다. 

 

[예제코드] 

arrary2 = np.array(
    [[1, 2, 3],
    [4, 5, 6]],
)
arrary2, arrary2.ndim, arrary2.shape

[결과]

(array([[1, 2, 3],
        [4, 5, 6]]), 2, (2, 3))

 

 

2_ 행렬의 모양 변경하기 

reshape()를 통해 객체(행렬)의 모양을 변경할 수 있습니다.

실제로 데이터를 변경하는 것은 아니고, 배열 객체의 shape 정보만을 수정합니다.  

 

[예제코드] 

arrary2.reshape(3, 2)

[결과]

array([[1, 2],
       [3, 4],
       [5, 6]])

 

3_ 행렬 데이터의 선택 : offset index (오프셋 인덱스)

array 배열 역시 index를 가지고 있어 데이터를 선택할 때 마스킹을 사용합니다

2차원 array 인덱스는

  • [ , ] 콤마를 기준으로 2개의 인자를 입력한다. (앞은 행, 뒤는 열)
  • [ ] [ ]  대괄호를 두개 써서 2개의 인자를 별도로 입력할 수 있습니다.  (앞은 행, 뒤는 열)


  • [행, 열] 로 데이터 선택하기 

[예제코드] 

arrary2[1, 2] # arrary2[1][2]

[결과]

6

 

 

 

  • [행] [열] 로 데이터 선택하기 

[예제코드] 

arrary2[1][::-1] #두번째 행을 선택하고, 처음부터 끝까지 가져오되, 역순으로 가져오기

[결과]

array([6, 5, 4])

 

 

4_ 데이터 수정하기 

이제 데이터를 선택했으니 list 처럼 수정해보겠습니다. 

 

[예제코드] 

#2번째 행에서 3번째 데이터를 선택하여 10으로 바꾸어주기
arrary2[1][2] = 10  
arrary2

[결과]

array([[ 1,  2,  3],
       [ 4,  5, 10]])

 

 

5_ 브로드캐스팅 (broad casting)  &  마스킹(masking)

 하나의 배열or 요소가 어떤 특정 배열에 영향을 미칠때 배열간의 형상을 맞추는 것을 브로드 캐스팅이라고 합니다 

 

[예제코드] 

# 첫번째 행의 전부를 0으로 데이터 바꾸기 
arrary2[0] = 0
arrary2

[결과]

array([[ 0,  0,  0],
       [ 4,  5, 10]])

 

[예제코드] 

# 첫번째 행을 7, 8, 9로 데이터 바꾸기 
arrary2[0] = [7, 8, 9]
arrary2

[결과]

array([[ 7,  8,  9],
       [ 4,  5, 10]])

 

** 브로드캐스팅에서 비교연산자를 사용하면 연산이 된 후 true / false 로 리턴됩니다

이후 masking할때 자주 사용됩니다. 

[예제코드] 

# array2 배열에서 7이상의 요소들만 true 로 반환
#idx변수를 만들어 (= masking을 만듬) true/false로 변환된 데이터를 저장) 
idx = arrary2 > 7
idx

[결과]

array([[False,  True,  True],
       [False, False,  True]])

 

[예제코드] 

#offset index 값으로 key를 찾는 것 처럼
#만들어진 idx 마스킹을 사용하여 true에 해당하는 값들만 출력할 수 있습니다. 
arrary2[idx]

[결과]

array([ 8,  9, 10])

 

 

[예제코드] 

# true에 해당하는 값들을 100을 넣어 주어 요소를 바꿉니다

arrary2[idx] = 100
arrary2

[결과]

array([[  7, 100, 100],
       [  4,   5, 100]])

 

 

6_ 행렬 데이터의 생성 _ zeros / ones 

Numpy는 원하는 shape으로 배열을 설정하고, 각 요소를 특정 값으로 초기화하는

zeros, ones 와 같은 다양한 함수를 제공합니다.

또한, 파라미터로 입력한 배열과 같은 shape의 배열을 만드는 zeros_like, ones_like, full_like 함수도 제공합니다.

이 함수를 이용하여 배열 생성하고 초기화할 수 있습니다.

 

 

1) np.zeros 함수

  • zeros(shape, dtype=float, order='C')

  • 지정된 shape의 배열을 생성하고, 모든 요소를 0으로 데이터를 만듭니다.

[예제코드] 

#2행 3열을 숫자 0으로 채워 배열 만들기 

data = np.zeros((2, 3))
data

[결과]

array([[0., 0., 0.],
       [0., 0., 0.]])

 

[예제코드] 

# 처음 제로스를 사용하면 데이터 타입이 실수로 나옵니다
data.dtype

[결과]

dtype('float64')

 

[예제코드] 

# 조금 더 깔끔하게 보여주기 위해 정수로 데이터 타입을 바꾸겠습니다

data2 = data.astype("int")
data2.dtype

[결과]

dtype('float64')

 

 

2) np.ones 함수

  • np.ones(shape, dtype=None, order='C')
  • 지정된 shape의 배열을 생성하고, 모든 요소를 1로 넣어줍니다. 

[예제코드] 

data = np.ones((2,3,3))
data

[결과]

array([[[1., 1.],
        [1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.],
        [1., 1.]]])

 

 

 

3) np.arange 함수

  • numpy.arange([start,] stop[, step,], dtype=None)
  • 시작점(start)부터 마지막(stop) 미만까지 간격(step)으로 데이터 생성한 후 배열을 만들어줍니다 
  • 범위내에서 간격을 기준 균등 간격의 배열
  • 요소의 객수가 아닌 데이터의 간격을 기준으로 배열 생성

[예제코드] 

#한개의  숫자(n) 만 입력하면, 자동으로 0부터 n-1까지 숫자가 출력됩니다

np.arange(5)

[결과]

array([0, 1, 2, 3, 4])

 

[예제코드] 

# 5부터 9까지 숫자를 출력
np.arange(5, 10)

[결과]

array([5, 6, 7, 8, 9])

 

[예제코드] 

#5부터 9까지 2step을 뛰어서 
np.arange(5, 10, 2)

[결과]

array([5, 7, 9])

댓글

Designed by JB FACTORY