NumPy?

  • 배열(array)를 사용해서 적은 메모리로 빠르게 데이터를 처리할 수 있는 module
  • 특히 수학적 연산이 매우 빠르고 편리하다.

2. 배열(Array) 이해하기

  • 보통 numpy는 간략히 np로 쓰는데 np.array()로 배열을 만든다.
  • np.array()로 만들어진 배열의 type은 numpy.ndarry이다.
  • 리스트안에 리스트를 넣어 $n$차원 배열을 만들 수 있다.
import numpy as np

# 1차원 배열
arr1 = np.array([0, 1, 2, 3])

# 2차원 배열 
arr2 = np.array([[1, 2, 3], [4, 5, 6]])

# 3차원 배열
arr3 = np.array([[[1, 2],[3, 4]],[[5, 6],[7, 8]]])

3. 배열(Array)의 연산

  • array와 list의 가장 큰 차이점 $\rightarrow$ 배열의 연산이 가능하다.
arr = np.array([1, 2, 3, 4, 5])
lst = [1, 2, 3, 4, 5]

print(f'배열 * 2 : {arr*2}')
print(f'리스트 * 2 : {lst*2}')
배열 * 2 : [ 2  4  6  8 10]
리스트 * 2 : [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]

4. 배열(Array)의 차원과 크기

command 설명
ndim 배열의 차원 크기를 반환
shape 배열의 크기를 반환
  • 리스트 [ ]당 차원이 1개라고 생각하면 편하다.
  • shape는 수학에서 행렬과 같다. 첫 리스트에서 ‘,’가 될 때마다 다음 행이라고 생각하면 된다. 즉, 원소의 개수가 $n$개인 1차원 배열이다.
  • 한 예로 arr3을 보면 첫 리스트에 2개의 리스트가 있고, 그 리스트 안에 또 2개의 리스트가 있다. 그리고 마지막으로 그 리스트 안에 4개의 원소가 있다. 그러면 arr3.shape은 차례대로 (2, 2, 4)가 되는 것이다.
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([[1, 2, 3], 
                 [4, 5, 6]])
arr3 = np.array([[[1, 2, 3, 4],
                  [5, 6, 7, 8]],
                 
                 [[9, 10, 11, 12],
                  [13, 14, 15, 16]]])

print(arr1.ndim, arr2.ndim, arr3.ndim)
print(arr1.shape, arr2.shape, arr3.shape)
1 2 3
(5,) (2, 3) (2, 2, 4)

5. 배열(Array)의 인덱싱 / 슬라이스

  • 리스트 [ ]안에 차원의 순서대로 인덱싱/슬라이싱을 하면된다.
  • 콤마 ‘,’로 구분해도 가능하다.
  • 리스트 [ ] 한 덩어리를 이라고 하고 덩어리 안의 같은 자리의 원소들을 이라고 이해하자.

1) 인덱싱

# Example1. arr1에서 원소 4를 추출하자.
print(arr1[3])

# Example2. arr2에서 원소 5를 추출하자.
print(arr2[1][1], arr2[1, 1])

# Example3. arr3에서 원소 10을 추출하자. 
print(arr3[1][0][1], arr3[1, 0, 1])

2) 슬라이싱

# Example1. arr1에서 원소 [2, 3, 4, 5]를 추출하자.
print(arr1[1:])

# Example2. arr2에서 원소 [4, 5, 6]를 추출하자.
print(arr2[1], arr2[1,:])

# Example3. arr3에서 원소 [13, 14, 15, 16]을 추출하자. 
print(arr3[1][1], arr3[1, 1, :])
  • 만약 각 차원에서 원소를 추출하고 싶다면?
# Example1. arr2에서 원소 [2, 5]를 추출하자.
print(arr2[:,1])

# Example2. arr3에서 원소 [[1, 5], [9, 13]]을 추출하자. 
print(arr3[:, :, 0])
  • 행(row)과 열(column)을 재배치할 수 있다.
arr2 = np.array([[1, 3, 2, 7],
                 [4, 8, 1, 2], 
                 [4, 6, 9, 5]])

# Example1. 열의 순서를 2, 3, 0, 1열 순으로 바꿔보자.
arr2[:, [2, 3, 0, 1]]

# Example1. 열의 순서를 2, 1, 0열 순으로 바꿔보자.
arr2[[2, 1, 0],:]

3) 조건에 맞는 원소 추출

  • 인덱스 안에 조건문을 입력하면 True인 배열만 추출된다.
# Example1. 짝수/홀수 찾기 
arr1 = np.array([i for i in range(10)])

print(f'짝수 : {arr1[arr1 % 2 == 0]}')
print(f'홀수 : {arr1[arr1 % 2 == 1]}')

# Example2. 3과 5의 공배수 찾기
arr2 = np.array([i for i in range(100)])

print(f'3과 5의 공배수 : {arr2[(arr2 % 3 == 0) & (arr2 % 5 == 0)]}')
짝수 : [0 2 4 6 8]
홀수 : [1 3 5 7 9]
3과 5의 공배수 : [ 0 15 30 45 60 75 90]

댓글남기기