본문 바로가기
Python/NumPy

[NumPy] 배열 생성 - (1)

by _sweep 2022. 1. 22.

엘리스AI트랙에서 제공하는 자료를 보고 정리한 내용입니다.

이수안컴퓨터연구소NumPy 한번에 끝내기 영상을 보고 정리한 내용입니다.

 

 

 

list로 배열 만들기

✔️ numpy.array()

NumPy에서는 파이썬의 자료형인 list로 다차원의 배열을 만들 수 있다.

 

numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0, like=None)

 

  • object : 배열 혹은 배열 인터페이스의 객체

 

# 1차원 배열 만들기
a1 = np.array([1, 2, 3, 4, 5])
print(a1)

# output
# [1 2 3 4 5]

# 2차원 배열 만들기
a2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(a2)

# output
# [[1 2 3]
# [4 5 6]
# [7 8 9]]

# 3차원 배열 만들기
a3 = np.array([
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]],
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]], 
    [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
])
print(a3)

# output
# [[[1 2 3]
#   [4 5 6]
#   [7 8 9]]

# [[1 2 3]
#   [4 5 6]
#   [7 8 9]]

# [[1 2 3]
#   [4 5 6]
#   [7 8 9]]]

 

 

이렇게 생성된 ndarray들은 ndim, shape, size, dtype 등 배열의 여러 정보를 나타내는 속성값을 담고 있다.

 

✔️ type()

python에서 제공하는 내장함수인 type()으로 생성된 배열의 자료형을 확인할 수 있다.

자료형이란 변수가 가지고 있는 값의 형태를 구분한 것으로 NumPy 배열의 자료형은 ndarray이다.

 

# type 확인
print(type(a1))

# output
# <class 'numpy.ndarray'>

 

type() 메서드를 통해 1차원 배열인 a1의 자료형을 확인해 보면 numpy의 ndarray라는 객체임을 알 수 있다.

이때 ndarray란 n-dimensional array를 뜻한다.

 

 

✔️ ndarray.ndim

ndarray.ndim으로 numpy 배열의 차원을 확인할 수 있다.

차원은 배열의 복잡도를 의미하며 차원이 하나 늘어날 때마다 데이터를 담는 방향(축)이 하나씩 늘어나게 된다.

ndarray.ndim은 ndarray가 1차원 배열이면 1, 2차원 배열이면 2, n차원 배열이면 n이 출력된다.

 

# 차원 확인
print(a1.ndim)

# output
# 1

 

 

✔️ ndarray.shape

ndarray.shape로 배열이 자료를 담고있는 형태를 확인할 수 있다.

ndarray가 1차원 배열일 경우 ndarray.shape의 출력값은 (배열이 담고있는 자료의 개수, )가 된다.

ndarray가 2차원 이상의 배열인 경우 ndarray.shape의 출력값은 (x축, y축, z축, ...)이 된다.

즉, ndarray가 3x3x3의 배열이라면 ndarray.shape의 출력값은 (3, 3, 3)이 되는 형태이다.

 

# shape 확인
print(a1.shape)

# output
# (5,)

# shape 확인
print(a2.shape)

# output
# (3, 3)

 

shape을 통해 1차원 배열인 a1과 2차원 배열인 a2의 shape을 확인했다.

a1은 5개의 자료를 가진 1차원 배열이라는 뜻으로 (5, )가 출력되었고 a2는 3x3 형태의 2차원 배열이라는 뜻으로 (3, 3)이 출력되었다.

 

 

✔️ ndarray.size

ndarray.size로 배열이 가지고 있는 자료들의 개수를 확인할 수 있다.

 

# size 확인
print(a1.size)

# output
# 5

 

 

✔️ ndarray.dtype

ndarray.dtype으로 배열이 담고 있는 요소들의 자료형을 확인할 수 있다.

예를 들어 정수를 담고 있는 배열의 자료형은 ndarray이지만 dtype은 int이다.

 

# dtype 확인
print(a1.dtype)

# output
# int64

 

 

✔️ ndarray.itemsize

ndarray.itemsize로 배열이 담고 있는 요소들의 크기를 알 수 있다.

단위는 byte이다.

 

# itemsize 확인
print(a1.itemsize)

# output
# 8

 

앞서 a1의 dtype이 int64임을 확인했다. 따라서 a1의 각 요소들은 8byte의 크기를 가진다.

 

 

✔️ ndarray.nbytes

ndarray.nbytes로 배열의 크기를 확인할 수 있다.

 

# nbytes 확인
print(a1.nbytes)

# output
# 40

 

 

✔️ ndarray.strides

ndarray.strides로 요소 하나를 넘어갈 때 필요한 byte를 알 수 있다.

ndarray.strides는 다음 차원으로 넘어가기 위해 shape보다 구체적으로 size를 나타내는 속성이다.

 

# strides 확인
print(a1.strides)

# output
# (8,)

 

 

 

배열 생성과 초기화

✔️ numpy.zeros()

배열의 모든 요소를 0으로 초기화한 배열이 생성된다.

 

numpy.zeros(shape, dtype=float, order='C', *, like=None)

 

  • shape: 정수 혹은 일련의 정수들

 

import numpy as np

# 1차원 배열
print(np.zeros(10))

# output
# [0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]

# 2차원 배열
print(np.zeros((2, 2)))

# output
# [[0., 0.],
# [0., 0.]]

 

만들 배열이 1차원이라면 zeros() 메서드의 인자로 자료의 개수를 넘겨주면 된다.

하지만 2차원 이상의 배열이라면 해당 배열의 shape을 정수로 이루어진 튜플의 형태로 넘겨준다.

 

 

✔️ numpy.ones()

배열의 모든 요소를 1로 초기화한 배열이 생성된다.

 

numpy.ones(shape, dtype=None, order='C', *, like=None)

 

  • shape: 정수 혹은 일련의 정수들

 

# 1차원 배열
print(np.ones(10))

# output
# [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

# 2차원 배열
print(np.ones((3, 2)))

# output
# [[1. 1.]
# [1. 1.]
# [1. 1.]]

 

 

 

✔️ numpy.full()

모든 요소를 지정한 값으로 초기화한다.

 

numpy.full(shape, fill_value, dtype=None, order='C', *, like=None)

 

  • shape : 정수 혹은 일련의 정수들
  • fill_value : 배열을 채울 값

 

print(np.full((3, 3), 2))

# output
# [[2, 2, 2],
#  [2, 2, 2],
#  [2, 2, 2]]

 

 

✔️ numpy.eye()

2차원의 단위행렬(identity matrix)을 생성한다.

단위행렬이란 주대각선의 원소가 모두 1이고 나머지 원소는 0인 정사각 행렬을 뜻한다.

 

numpy.eye(N, M=None, k=0, dtype=<class 'float'>, order='C', *, like=None)

 

  • N : 정수. 행의 수.

 

print(np.eye(3))

# output
# [[1., 0., 0.],
#  [0., 1., 0.],
#  [0., 0., 1.]]

 

 

✔️ numpy.tri()

삼각행렬을 생성한다.

삼각행렬이란 정사각 행렬의 특수한 형태로 주대각선을 기준으로 대각항의 위쪽이나 아래쪽 항의 값이 모두 0인 경우를 말한다.

numpy.tri()는 주대각선을 기준으로 대각항의 위쪽은 0, 대각항의 아래쪽은 1로 채워진 삼각행렬을 반환한다.

 

numpy.tri(N, M=None, k=0, dtype=<class 'float'>, *, like=None)

 

  • N : 정수. 행의 수.

 

print(np.tri(3))

# output
# [[1., 0., 0.],
#  [1., 1., 0.],
#  [1., 1., 1.]]

 

 

✔️ numpy.empty()

초기화되지 않은 배열을 생성한다.

초기화가 되지 않아 배열의 생성비용이 저렴하고 빠르다는 장점이 있다.

그러나 초기화가 되지 않아 기존 메모리 위치에 존재하는 값이 있을 수 있다는 단점이 있다.

 

numpy.empty(shape, dtype=float, order='C', *, like=None)

 

  • shape: 정수 혹은 일련의 정수들

 

print(np.empty(5))

# output
# [4.9e-324, 9.9e-324, 1.5e-323, 2.0e-323, 2.5e-323]

 

 

✔️ numpy._like()

지정된 배열과 shape이 같은 배열을 생성한다.

numpy.zeros_like(), numpy.ones_like(), numpy.full_like(), numpy.empty_like()가 존재한다.

 

# a1의 shape과 같은 0으로 초기화된 배열 만들기
print(a1)
print(np.zeros_like(a1))

# output
# [1 2 3 4 5]
# [0 0 0 0 0]


# a2의 shape과 같은 13으로 초기화된 배열 만들기
print(a2)
print(np.full_like(a2, 13))

# output
# [[1 2 3]
# [4 5 6]
# [7 8 9]]
# [[13 13 13]
# [13 13 13]
# [13 13 13]]

 

 

🔍 참조

numpy.array https://numpy.org/doc/stable/reference/generated/numpy.array.html#numpy.array

numpy array creation routines https://numpy.org/doc/stable/reference/routines.array-creation.html

삼각행렬 https://ko.wikipedia.org/wiki/%EC%82%BC%EA%B0%81%ED%96%89%EB%A0%AC

 

 

 

 

 

'Python > NumPy' 카테고리의 다른 글

[NumPy] 배열 변환 - (1)  (0) 2022.01.24
[NumPy] 배열 값 삽입/수정/삭제/복사  (0) 2022.01.24
[NumPy] 인덱싱과 슬라이싱  (0) 2022.01.23
[NumPy] 배열 생성 - (2)  (0) 2022.01.23
[NumPy] NumPy의 정의와 특징  (0) 2022.01.22

댓글