HOWTO · NumPy

빈 NumPy 배열 만들기

numpy.zeros()와 numpy.empty()를 사용해 Python에서 빈 NumPy 배열을 만드는 방법을 배웁니다. 이 가이드는 각 메서드에 대한 명확한 예제와 자세한 설명을 제공하여 데이터 조작 작업을 위해 배열을 효율적으로 초기화할 수 있게 돕습니다. 초보자든 숙련된 프로그래머든 코딩 실력을 높이는 데 도움이 되는 유용한 통찰을 얻을 수 있습니다.

이 페이지의 내용

각 요소를 0으로 시작해야 한다면 numpy.zeros()를 사용하세요. 읽기 전에 모든 요소에 값을 대입할 예정이라면 numpy.empty()를 사용할 수 있습니다. 이름과 달리 numpy.empty()도 요청한 개수만큼 요소가 있는 배열을 만듭니다. 다만 초기값을 직접 설정하지는 않습니다. shape 인수는 배열의 차원을 지정합니다. 5처럼 정수 하나를 전달하면 1차원 배열이 만들어지고, (3, 4)처럼 튜플을 전달하면 행 3개와 열 4개로 이루어진 배열이 만들어집니다.

numpy.zeros()로 0으로 채워진 배열 만들기

numpy.zeros()는 배열을 할당하고 모든 요소를 0으로 초기화합니다. 1차원 배열에는 정수를, 여러 차원의 배열에는 튜플을 전달하세요. 기본적으로 NumPy는 부동 소수점 dtype을 사용하므로 출력값에 소수점이 표시될 수 있습니다. 정수 요소가 필요하면 dtype=int를 전달하세요. 나중에 일부 위치만 갱신하고 나머지는 0으로 유지하는 경우처럼, 시작값이 정해져 있어야 한다면 이 함수를 선택하세요.

이 예제는 1차원 배열과 2차원 정수 배열을 각각 만들고, 한 위치의 값을 갱신합니다. 배열의 값과 shape 속성이 반환하는 튜플을 출력합니다.

다음 예제를 실행하세요.

import numpy as np

values = np.zeros(5)
matrix = np.zeros((3, 4), dtype=int)
values[2] = 7

print(values)
print(matrix.shape)
[0. 0. 7. 0. 0.]
(3, 4)

numpy.zeros()는 모든 위치를 초기화하므로 배열을 조금씩 채워 나갈 때도 적합합니다. 초기 dtype도 중요합니다. 정수 배열에는 정수 값이 저장되고, 부동 소수점 배열에는 소수 값을 저장할 수 있습니다. shape 매개변수는 항상 차원을 지정하며, 반드시 “행과 열”을 뜻하지는 않습니다. 5처럼 항목이 하나인 shape은 1차원이고, (3, 4)는 2차원입니다.

numpy.empty()로 초기화되지 않은 배열 만들기

일반적인 숫자 dtype에서 numpy.empty()는 요청한 shape의 배열을 만들지만 요소를 초기화하지 않으므로 초기값은 정해져 있지 않습니다. 객체 dtype은 다릅니다. 예를 들어 np.empty(2, dtype=object)는 두 요소를 모두 None으로 초기화합니다. 요소를 읽기 전에 유효한 값을 대입하고, 숫자 배열의 초기 내용에 의존하지 마세요.

프로그램이 모든 요소를 즉시 채울 수 있고, 해당 작업에서 초기화 과정을 생략하는 것이 유용하다면 이 함수를 사용하세요. 시간이 눈에 띄게 절약되는지는 배열 크기, 이후의 대입 작업, 하드웨어와 주변 작업에 따라 달라집니다. 항상 더 빠른 것은 아닙니다. 신뢰할 수 있는 시작값이 필요하거나 일부 위치만 갱신한다면 대신 numpy.zeros()를 사용하세요.

다음 예제는 배열을 읽기 전에 모든 위치에 값을 대입합니다. 같은 원칙을 지키면 차원이나 dtype을 바꿔도 됩니다. 사용하기 전에 모든 요소에 값을 쓰세요.

import numpy as np

values = np.empty((2, 3), dtype=int)
values[:] = [[1, 2, 3], [4, 5, 6]]

print(values)
[[1 2 3]
 [4 5 6]]

1차원 배열에서는 values = np.empty(5, dtype=int)로 만든 다음, 읽기 전에 다섯 위치 모두에 값을 대입하면 같은 방식으로 사용할 수 있습니다. 여러 차원에서도 튜플 shape을 동일하게 사용할 수 있습니다. numpy.empty()라는 이름은 초기화되지 않았다는 뜻이지 요소가 없는 배열이라는 뜻은 아닙니다. 배열의 shape과 요소 개수는 전달한 인수로 결정됩니다.