본문 바로가기
Python/NumPy

Python 리스트와 NumPy 배열의 차이점

by 찐남 2021. 9. 5.
본 포스팅은 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

댓글