본 포스팅은 NumPy 패키지 홈페이지의 원본 내용을 기반으로 작성하였습니다.
NumPy는 배열을 생성하고 배열 내부의 숫자 데이터를 조작하는 빠르고 효율적인 방법을 광범위하게 제공합니다. Python 목록은 단일 목록 내에 다양한 데이터 유형을 포함할 수 있지만 NumPy 배열의 모든 요소는 동일 유형이어야 합니다. 배열에 대해 수행되는 수학 연산은 배열이 동질적이지 않은 경우 극도로 비효율적입니다.
왜 NumPy를 사용할까요?
NumPy 배열은 Python 리스트보다 빠르고 콤팩트합니다. 배열은 메모리를 덜 소모하고 사용하기 편리합니다. NumPy는 데이터를 저장하는 데 훨씬 적은 메모리를 사용하며 데이터 유형을 지정하는 메커니즘을 제공합니다. 이를 통해 코드를 더욱 최적화할 수 있습니다.
배열(Array)
배열은 NumPy 라이브러리의 중심 데이터 구조입니다. 배열은 값의 그리드이며 원시 데이터, 요소를 찾는 방법 및 요소를 해석하는 방법에 대한 정보를 포함합니다. 다양한 방법으로 인덱싱할 수 있는 요소 그리드가 있습니다. 요소는 모두 dtype 배열이라고 하는 동일한 유형입니다.
배열은 음이 아닌 정수의 튜플, 부울, 다른 배열 또는 정수로 인덱싱 될 수 있습니다. 배열의 rank는 차원 수입니다. 배열의 shape은 각 차원을 따라 배열의 크기를 제공하는 정수 튜플입니다.
NumPy 배열을 초기화할 수 있는 한 가지 방법은 2차원 이상의 데이터에 대해 중첩 리스트를 사용하여 Python 리스트에서 가져오는 것입니다. 예를 들면, 아래와 같습니다.
>>> a = np.array([1, 2, 3, 4, 5, 6])
# or
>>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
대괄호를 사용하여 배열의 요소에 액세스할 수 있습니다. 요소에 액세스할 때 NumPy의 인덱싱은 0에서 시작한다는 것을 꼭! 기억하세요(※ R은 1에서부터 시작하기 때문에, R를 활용하시는 분들은 많이 혼란스러울 수 있습니다.). 즉, 배열의 첫 번째 요소에 액세스 하려는 경우 요소 "0"에 액세스 하게 됩니다.
>>> print(a[0])
[1 2 3 4]
배열에 대한 추가 정보
이번 포스팅에서 1D 배열, 2D 배열, ndarray, 벡터, 행렬을 다룹니다.
"N차원 배열"의 줄임말인 "ndarray"라는 배열을 종종 들을 수 있습니다. N차원 배열은 단순히 차원의 수에 관계없이 배열입니다. 1차원 또는 1차원 배열, 2차원 또는 2차원 배열 등을 들을 수도 있습니다. NumPy ndarray 클래스는 행렬과 벡터를 모두 나타내는 데 사용됩니다. 벡터는 단일 차원의 배열(행 벡터와 열 벡터 간에 차이가 없음)인 반면, 행렬은 2차원 배열을 나타냅니다. 3차원 또는 그 이상의 차원 배열의 경우 tensor라는 용어도 일반적으로 사용됩니다.
배열의 속성은 무엇일까요?
배열은 일반적으로 유형 및 크기가 동일한 항목의 고정 크기 컨테이너입니다. 배열의 차원 및 항목 수는 모양에 따라 정의됩니다. 배열의 shape은 각 차원의 크기를 지정하는 음이 아닌 정수의 튜플입니다. NumPy에서는 차원을 축이라고 합니다. 즉, 다음과 같은 2D 배열이 있는 경우
[[0., 0., 0.],
[1., 1., 1.]]
배열에는 2개의 축이 있습니다. 첫 번째 축의 길이는 2이고 두 번째 축의 길이는 3입니다.
다른 Python 컨테이너 객체와 마찬가지로 배열의 내용은 배열을 인덱싱 하거나 슬라이스 하여 액세스하고 수정할 수 있습니다. 일반적인 컨테이너 개체와 달리 다른 배열은 동일한 데이터를 공유할 수 있으므로 한 배열에서 변경한 내용을 다른 배열에서 볼 수 있습니다. 배열 속성은 배열 자체에 고유한 정보를 반영합니다. 새 배열을 만들지 않고 배열의 속성을 가져오거나 설정해야 하는 경우 속성을 통해 배열에 액세스 할 수 있는 경우가 많습니다.
기본 배열을 만드는 방법
np.array(), np.zeros(), np.ones(), np.empty(), np.arange(), np.linspace(), dtype 등을 활용해 보겠습니다.
NumPy 배열을 생성하려면 np.array() 함수를 사용할 수 있습니다. 간단한 배열을 만들기 위해 해야 할 일은 리스트를 전달하는 것입니다. 원할 경우 리스트에서 데이터 유형을 지정할 수도 있습니다. 여기에서 데이터 유형에 대한 자세한 정보를 찾을 수 있습니다.
>>> import numpy as np
>>> a = np.array([1, 2, 3])
다음과 같이 배열을 시각화할 수 있습니다.
이러한 시각화는 아이디어를 단순화하고 NumPy 개념 및 메커니즘에 대한 기본적인 이해를 제공하기 위한 것입니다!
배열 및 배열 작업은 여기에 캡처된 것보다 훨씬 더 복잡합니다!
이외에도 0으로 채워진 배열을 쉽게 만들 수 있습니다.
>>> np.zeros(2)
array([0., 0.])
또는 1로 채워진 배열을 쉽게 만들 수 있습니다.
>>> np.ones(2)
array([1., 1.])
또는 empty 배열일 수도 있습니다! empty 함수는 초기 내용이 무작위이고 메모리 상태에 따라 달라지는 배열을 만듭니다. 0보다 비어 있는 것(또는 이와 유사한 것)을 사용하는 이유는 속도 때문입니다. 나중에 모든 요소를 채워야 합니다!
>>> # Create an empty array with 2 elements
>>> np.empty(2)
array([ 3.14, 42. ])
# may vary
요소 범위가 있는 배열을 만들 수 있습니다.
>>> np.arange(4)
array([0, 1, 2, 3])
균등한 간격의 범위를 포함하는 배열도 있습니다. 이렇게 하려면 첫 번째 숫자, 마지막 숫자 및 단계 크기를 지정합니다.
>>> np.arange(2, 9, 2)
array([2, 4, 6, 8])
np.linspace()를 사용하여 선형으로 지정된 간격을 둔 값으로 배열을 만들 수도 있습니다.
>>> np.linspace(0, 10, num=5)
array([ 0. , 2.5, 5. , 7.5, 10. ])
데이터 유형 지정
기본 데이터 유형은 부동 소수점(np.float64)이지만 dtype 키워드를 사용하여 원하는 데이터 유형을 명시적으로 지정할 수 있습니다.
>>> x = np.ones(2, dtype=np.int64)
>>> x
array([1, 1])
'Python > NumPy' 카테고리의 다른 글
NumPy 인덱싱, 슬라이싱, 반복 (0) | 2021.09.09 |
---|---|
NumPy 기본 옵션 및 함수 (0) | 2021.09.08 |
NumPy 활용 기초 코드 작성 (0) | 2021.09.07 |
NumPy 기초 (0) | 2021.09.06 |
NumPy 개요 및 패키지 설치하기 (0) | 2021.09.04 |
댓글