SJ_Koding

Numpy의 개요와 생성 본문

Data analysis/Numpy

Numpy의 개요와 생성

성지코딩 2021. 12. 31. 00:34

안녕하세요! 성지코딩입니다.

블로그 개시 후 첫 글입니다. 이 글이 성지가 될 수 있을지는 3년뒤에 확인해보겠습니다. :)

제 글들은 누군가의 강의에 주 목적을 둔다긴 보다는 설명하는 어투로 쓰면서 제 공부를 하는 것이 주 목적입니다.

평소 누군가를 가르치며 저 또한 학습이 되었던 경험이 많았기 때문에 이러한 방법을 택했습니다.

제 첫 게시글은 Numpy의 개요에 대해 알아보도록 합니다.

사진 출처: numpy 공식사이트, numpy.org

 Numpy란?


Numpy는 Numeric(숫자) Python의 준 말로, Python을 사용한 과학 컴퓨팅의 기본 패키지입니다.

제목에서 알 수 있듯 여러 숫자들을 처리하는데 사용되는 패키지입니다.

Python을 사용하는 프로그래머라면 절대 빠질 수 없는 패키지 이기 때문에 필수적으로 알아두셔야합니다.

나중에 배워볼 Pandas 패키지도 Numpy 기반으로 제작되었습니다. Numpy를 미리 아신 후에 Pandas를 공부하면 큰 도움이 됩니다.

Numpy의 특징


Numpy는 다음과 같은 특징이 있습니다.

  1. 오픈소스
  2. 손쉬운 사용
  3. 최적화된 성능
  4. 수치 계산 도구
  5. 광범위한 하드웨어 및 컴퓨팅 플랫폼 지원
  6. 강력한 N차원 배열을 지원(Numpy ndarray) (nd: n-dimention / array)
    • 강력한 N차원 배열을 지원한다는 것은 일반 리스트로 다 차원을 표현한 것에 비해 훨씬 더 쉽고 효율적으로 처리할 수 있음을 의미합니다. 추후 게시글들을 보다 보면 느낄 수 있습니다.
  7. 종합적인 수학 함수, 난수 생성기, 선형 대수 루틴, 푸리에 변환 등 제공

Array 생성


  • Numpy에서 Array를 만들기 위한 방법은 크게 다음과 같습니다.
    • 다른 Python 자료 구조(list, tuple)로 부터의 변환
      • array 함수 이용
    • Numpy Array 생성 함수 이용
      • arange, ones, linspace 함수 이용

array 함수를 이용한 방법


1차원 배열 생성

import numpy as np
np.array([1, 2, 3, 4])

출력 결과:
array([1, 2, 3, 4])

2차원 배열 생성

import numpy as np
np.array([[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]])

출력 결과:
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])

3차원 배열 생성

np.array([[[0, 1, 2, 3],
           [4, 5, 6, 7],
           [8, 9, 10, 11]]])

출력 결과:
array([[[0, 1, 2, 3],
[5, 6, 7, 8],
[9, 10, 11, 12]]])

다른 함수를 이용한 방법 (arange, linspace, ones 등)


arange 함수를 이용한 배열 생성

Numpy의 arange함수는 수의 범위를 만들어 주는 함수로 range함수와는 다르게 실수 범위도 생성 가능 (range함수는 정수의 범위를 생성합니다.)

print(np.arange(10))
print(np.arange(0.1, 1.1, 0.1))

출력 결과:
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.])


주의사항: for문을 배우면서 잘 아시겠지만range나 arange함수의 두 번째 인자값은 범위에 포함시키지 않습니다! 실수형도 포함입니다!

linspace 함수를 이용한 배열 생성

Numpy의 linspace 함수는 수의 범위를 균일하게 나누고자 할 때 사용합니다.
np.linspace(<시작>, <끝>, <범위를 나눌 수>)
주의사항: linspace 의 끝은 포함을 시킵니다! 아래 예시의 결과출력을 참고해주세요

ex) 1에서 10까지 3개 구간으로 나누고 싶을 때 구간 값

np.linspace(1, 10, 3)

출력 결과:
array([1., 5.5, 10.])


주의사항: linspace(1, 10, 3) / range(1, 10, 3)과는 엄연히 다릅니다! 출력 결과를 참고해주세요, 또한 1. 혹은 10.과 같이 표기되는 것은 각각 1.0, 10.0과 동일합니다.

기타 함수를 이용한 배열 생성 (ones, full, zeros, eye)

np.ones((x, y)) : x by y 사이즈의 1(ones)로 채워진 행렬을 생성합니다.
np.full((x, y), n) : x by y 사이즈의 n값으로 채워진 행렬을 생성합니다.
np.zeros((x, y)) : x by y 사이즈의 0(zeros)으로 채워진 행렬을 생성합니다.
np.eye(x) : x by x 사이즈의 단위행렬을 생성합니다.

print(np.ones((2, 2)), '\n')      # 2 by 2 크기의 행렬을 1로 채움
print(np.full((2, 2), -1), '\n')  # 2 by 2 크기의 행렬을 -1로 채움 (full의 두 번째 인자 값으로 채움)
print(np.zeros((2, 2), '\n')      # 2 by 2 크기의 행렬을 0으로 채움
print(np.eye(2), '\n')           # 2 by 2 크기의 단위행렬을 생성 

출력 결과:
array([[1., 1.],
[1., 1.]])

array([[-1, -1],
[-1, -1]])

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

array([[1, 0],
[0, 1]])


오늘은 Numpy의 간단한 개요와 생성 방식에 대해 알아보았습니다. 다음 Numpy 게시글은 Numpy데이터의 속성과 유형 변경에 대해 알아봅니다! 첫 포스팅을 마무리 지었네요.

 

마크다운으로 편집하니 가독성이 썩 좋지 않네요, 글쓰기에 팁이 있다면 댓글로 알려주시면 빠르게 발전하겠습니다 ㅎㅎ

감사합니다.

-SJKoding-