🔎 Numpy란?


다차원 배열을 효과적으로 처리하도록 도와주는 도구.
Python의 기본 List보다 빠르고 강력한 기능을 제공한다.


  • Numpy 설치 방법

pip install numpy

🔎 Numpy 주요 메소드


📍 잘 사용하지 않을 것 같은 파라미터는 생략했음

📍 배열 생성

arange

arr = np.arange(4)
print(arr)

>> [0 1 2 3]

범위만큼의 배열을 생성한다.

arange([start,] stop, [step,] dtype=None)

start, step을 주지 않으면 0부터 1씩 증가하는 배열을 생성한다.

start : 값의 시작 범위
stop : 값의 끝 범위
step : 값의 간격
dtype : 배열 값의 타입


zeros

arr = np.zeros((2,2))
print(arr)

>> [[0. 0.]
  [0. 0.]]

0으로 채워진 배열을 생성한다.


ones

arr = np.ones((2,2))
print(arr)

>> [[1. 1.]
  [1. 1.]]

1로 채워진 배열을 생성한다.

full

arr = np.full((2,2), 7)
print(arr)

>> [[7 7]
   [7 7]]

지정한 값으로 채워진 배열을 생성한다.


eye

arr = np.eye(2)
print(arr)

>> [[1. 0.]
   [0. 1.]]

단위 행렬을 생성한다.

💡 단위 행렬
  주대각선의 원소가 모두 1이며 나머지 원소는 모두 0인 정사각 행렬


📍 난수 생성

random.rand

arr = np.random.rand(10)
print(arr)

>> [0.58175577 0.48856864 0.25551639 0.78987922 0.28643834 0.40069823
    0.74301636 0.56452048 0.75722793 0.57143153]

(0,1]의 범위에서 랜덤한 수로 이루어진 n차원 배열을 생성해준다.

💡 나중에 random.rand와 random.random의 차이 찾아보기

random.randint

arr = np.random.randint(1,10,5)
print(arr)

>> [3 1 2 5 1]

randint(low, high=None, size=None, dtype=int)

(low,high]의 범위에서 랜덤한 수로 이루어진 n차원 배열을 생성해준다.


📍 배열 연산

concatenate

arr1 = np.array([1,2,3])
arr2 = np.array([4,5,6])

arr3 = np.concatenate([arr1, arr2])
print(arr3)

>> [1 2 3 4 5 6]
arr1 = np.arange(4).reshape(1,4)
arr2 = np.arange(8).reshape(2,4)
arr3 = np.concatenate([arr1,arr2],axis = 0)

print(arr3)

>> [[0 1 2 3]
   [0 1 2 3]
   [4 5 6 7]]

배열을 더해준다.
axis의 값에 따라 더하는 축이 달라진다.

차원/axis012
1*
2
3

💡 1차원 배열은 축이 1개라 행, 열의 구분이 없음

reshape

arr1 = np.array([1,2,3,4])
arr2 = arr1.reshape(2,2)
print(arr2)

>> [[1 2]
   [3 4]]

배열의 형태를 바꿔준다.

split

arr = np.arange(8).reshape(2,4)
left, right = np.split(arr, [2], axis = 1)

print(left)
print(right)

>> [[0 1]
   [4 5]]
>> [[2 3]
   [6 7]]

배열을 나눠준다.

📍 slicing

slicing은 새로운 View를 만드는 것

arr1 = np.arange(8).reshape(2,4)
arr2 = arr1[:2,1:3]

print(arr2)

>> [[1 2]
   [5 6]]

슬라이싱 방법은 기존 파이썬과 같다.

arr2[0,0] = 99

print(arr1)

>> [[ 0 99  2  3]
   [ 4  5  6  7]]

arr2의 값을 바꿨는데 arr1도 변해있다.
arr2는 arr1과 다른 배열이 아니라, arr1의 뷰일 뿐이기 때문이다.

슬라이싱을 통해 생성된 배열은, 새로운 배열이 아니라 기존 배열의 뷰!

Boolean Indexing

arr =  np.random.randint(1, 100, size = 10)
print(arr)

# arr에서 짝수만 마스크
even_mask = arr%2 == 0

print(even_mask)
print(arr[even_mask])

>> [60 72 44 67 76 97 39 99 97  6]
>> [ True  True  True False  True False False False False  True]
>> [60 72 44 76  6]

이렇게 원하는 조건으로 배열을 추출할 수 있다.

Integer Indexing

정수 인덱싱은 뷰를 만드는 것이 아니라, Copy를 만드는 것!

... 뭐지? 나중에 다시 공부

0개의 댓글

Powered by GraphCDN, the GraphQL CDN