Posts 넘파이(Numpy) 기초 (1)
Post
Cancel

넘파이(Numpy) 기초 (1)

1. 넘파이(Numpy)


1.1 넘파이란

  • 데이터는 행렬로 표현된다.
  • 행렬 데이터 빠르게 계산하는 파이썬 패키지
  • 행렬 데이터 생성, 수정, 계산 등을 빠르게 처리해주는 패키지
  • 특징
    • C, C++, 포트란으로 작성
    • 선형대수학을 빠르게 연산
      • 스칼라, 벡터, 매트릭스


2. 넘파이 실습


2.1 넘파이 불러오기

1
import numpy as np
  • import numpy as np로 np라는 약어로 많이 사용됨


2.2 행렬 데이터 생성

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


1
2
3
4
5
array2 = np.array(
    [[1, 2, 3],
     [4, 5, 6]],
)
array2, array2.ndim, array2.shape
1
2
3
4
(array([[1, 2, 3],
        [4, 5, 6]]),
 2,
 (2, 3))
  • ndarray : 한가지 데이터 타입만 값으로 사용이 가능
  • ndim : 몇 차원인지 확인하는 메서드
  • shape : array의 모양을 출력


2.3 행렬의 모양 변경하기 - reshape

1
2
3
4
5
6
print(array2.reshape(3,2))
print()
print(array2.reshape(6))
print()
print(array2.reshape(3,2,1))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[[1 2]
 [3 4]
 [5 6]]

[1 2 3 4 5 6]

[[[1]
  [2]]

 [[3]
  [4]]

 [[5]
  [6]]]
  • 행렬의 모양을 변경하는 메서드
  • 다만, 전체 value값을 넘지못함


2.4 행렬 데이터의 선택 - offset index, masking

1
array2[1], array2[1][2], array2[1][::-1], array2[1][:6]
1
(array([4, 5, 6]), 6, array([6, 5, 4]), array([4, 5, 6]))


1
array2[1,2]
1
6
  • 리스트 처럼 offset index와 masking 사용이 가능함


2.5 데이터 수정

1
2
3
ls = [1, 2, 3]
ls[1] = 5
ls
1
[1, 5, 3]


1
2
array2[1][2] = 10
array2
1
2
array([[ 1,  2,  3],
       [ 4,  5, 10]])
  • masking을 활용하여 해당 부분의 데이터를 수정 가능함


2.6 브로드 캐스팅

1
2
array2[0] = 0
array2
1
2
array([[ 0,  0,  0],
       [ 4,  5, 10]])
  • array2[0] = 0으로 array2[0]의 3개의 원소가 전부 0으로 변경됨 (브로드캐스팅)


1
2
array2[0] = [7,8,9]
array2
1
2
array([[ 7,  8,  9],
       [ 4,  5, 10]])
  • 물론 각각 1개씩 원소를 직접 수정도 가능함


2.7 조건으로 선택

1
2
idx = array2 > 7
idx
1
2
array([[False,  True,  True],
       [False, False,  True]])
  • 조건으로 선택하면 True, False로 반환이 됨


1
array2[idx]
1
array([ 8,  9, 10])
  • 조건으로 반환 받은변수를 Masking 하면 True 값만 반환됨


1
2
array2[idx] = 100
array2
1
2
array([[  7, 100, 100],
       [  4,   5, 100]])
  • 위의 내용에서 브로드 캐스팅도 가능함


2.8 행렬 데이터의 생성2

1
2
data = np.zeros((2,3))
data
1
2
array([[0., 0., 0.],
       [0., 0., 0.]])
  • 영행렬 생성 (np.zeros)


1
data.dtype
1
dtype('float64')
  • 기본적으로 생성된 타입은 float64


1
2
data2 = data.astype('int64')
data2.dtype, data2
1
2
3
(dtype('int64'),
 array([[0, 0, 0],
        [0, 0, 0]]))
  • astype을 사용하여 int64로 데이터 타입 변경


1
2
data = np.ones((2, 3, 2))
data
1
2
3
4
5
6
7
array([[[1., 1.],
        [1., 1.],
        [1., 1.]],

       [[1., 1.],
        [1., 1.],
        [1., 1.]]])
  • np.ones : 모든 값이 1인 행렬을 생성


2.9 arange 생성

1
np.arange(5)
1
array([0, 1, 2, 3, 4])
  • 0부터 4까지 배열을 생성


1
np.arange(5, 10)
1
array([5, 6, 7, 8, 9])
  • 5부터 0까지 배열을 생성


1
np.arange(5, 10, 2)
1
array([5, 7, 9])
  • 5부터 10까지 배열을 만들면서 2씩 건너뜀
This post is licensed under CC BY 4.0 by the author.