AtraFelis's Develop Diary

[Python] 넘파이(numpy)와 ndarray 본문

Programming/Python

[Python] 넘파이(numpy)와 ndarray

AtraFelis 2024. 4. 14. 21:16

넘파이란?

숫자 데이터를 포함한 벡터와 행렬 연산에 유용한 파이썬 라이브러리.

 

장점

1.속도가 빠르다.

C언어로 구현되어 있으며, 리스트와 달리 넘파이의 배열은 모든 원소가 같은 자료형으로 이루어지기에 속도가 빠르다.

 

2.문법이 쉽다.

복잡한 연산이나, 연산해야 할 데이터가 증가할 수록 넘파이를 쓰는 것이 좋다.

넘파이 설치와 사용
$ pip install numpy

pip 명령어를 이용해 넘파이 라이브러리를 설치하여 사용하면 된다.

import numpy as np

넘파이 라이브러리는 관용적으로 np라는 이름으로 사용한다.


넘파이의 배열 : ndarray

넘파이의 배열은 ndarray라고 불린다. 위에서 언급한 것처럼, C언어나 Java의 배열과 동일하다고 생각하면 된다.

ndarray는 차원 별로 밑의 네 가지로 분류할 수 있다.

  • 스칼라(Scalar) : 0차원 배열. 배열의 값을 의미한다.
a = np.array(5)
print(a.shape)
# ()
# 값이 하나이기에 모양이 나오지 않음
  • 벡터(Vector) : 1차원 배열. 스칼라 여러 개를 나열한 튜플(Tuple)
a = np.array([1, 2, 3, 4])
print(a.shape)
# a.shape:  (5,)
  • 행렬(Matrix) : 2차원 배열. 1차원 배열을 여러 개 묶은 배열.
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)
# (2, 3)
# (행, 열)
  • 텐서(Tensor) : 벡터의 집합. 3차원 이상은 모두 텐서이다.
a = np.array([[1, 2, 3], [4, 5, 6]],
            [[7, 8, 9], [10, 11, 12]]) # 3차원 텐서
print(a.shape)
# (2, 2, 3)
# (면, 행, 열)
b = np.array([ [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]],
            [[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]] ])  #4차원 텐서
print(b.shape)
# (2, 2, 2, 3)

 

배열 생성 함수

   
함수 설명
array(p_object, dtype=None) 리스트를 배열로 변환한다
arange([start,] stop[, step,], dtype=None) 주어진 간격의 수를 배열로 반환한다 (range함수와 유사하다)
ones(shape, dtype=None) 주어진 shape 대로, 1로 채운 n차원 배열을 생성한다.
zeros(shape, dtype=None) 주어진 shape 대로, 0으로 채운 배열을 생성한다.
empty 주어진 shape 대로, 초기화하지 않은 빈 배열을 생성한다.
eye(N, M=None, k=0, dtype=float) n * m 크기의 k 번째 열부터 우측 대각선 방향으로 1, 나머지는 0으로 채운 행렬을 생성한다.
identity(n, dtype=None) 0번째 요소부터 대각선 방향으로 1, 나머지는 0으로 채운 n * n 2차원 정방 행렬을 생성한다.
linspace(start, stop, num=50) start부터 stop까지 일정한 간격으로 num 간격만큼 수를 채운 벡터를 생성한다.
full(shape, fill_value, dtype=None) 주어진 shape 대로, 지정한 수로 채운 배열을 생성한다.