Python 배열 가이드

Python 배열 가이드

개요

휴대폰에 좋아하는 노래의 재생목록이 있다고 상상해 보세요. 이 재생목록은 각 노래를 특정 순서로 나열한 목록입니다. 첫 번째 곡을 재생하고, 두 번째 곡으로 건너뛰고, 다섯 번째 곡으로 건너뛰는 등의 작업을 수행할 수 있습니다. 이 재생 목록은 컴퓨터 프로그래밍의 배열과 매우 유사합니다.

배열은 가장 기본적이고 널리 사용되는 데이터 구조 중 하나입니다.

본질적으로 배열은 여러 항목(예: 숫자, 문자 또는 기타 배열)을 특정 순서로 저장하는 구조화된 방법이며 해당 위치(색인)를 알고 있으면 모든 항목에 빠르게 액세스, 수정 또는 제거할 수 있습니다.

이 가이드에서는 배열 데이터 구조에 대한 포괄적인 개요를 제공합니다. 먼저 배열이 무엇인지, 그리고 배열의 주요 특징은 무엇인지 살펴보겠습니다. 그런 다음 Python의 세계로 전환하여 실제 시나리오에서 배열이 어떻게 구현, 조작 및 적용되는지 살펴보겠습니다.

배열 데이터 구조 이해

배열은 컴퓨터 과학 및 프로그래밍에 사용되는 가장 오래되고 가장 기본적인 데이터 구조 중 하나입니다. 특정 작업의 효율성과 단순성이 결합되어 데이터 관리 및 조작 영역을 탐구하는 모든 사람에게 주요 주제가 됩니다.

배열은 일반적으로 항목의 모음입니다. 같은 유형, 저장 위치 연속된 메모리 위치.

이 연속 저장소를 사용하면 배열은 해당 인덱스가 있는 모든 요소에 대한 지속적인 액세스를 제공할 수 있습니다. 배열의 각 항목을 요소, 배열의 요소 위치는 해당 요소에 의해 정의됩니다. 색인, 일반적으로 XNUMX부터 시작한다.

예를 들어, 정수 배열을 고려해보세요: [10, 20, 30, 40, 50]. 여기서 요소는 20 의 지수를 가지고 있습니다 1:

파이썬 배열 인덱싱

여러 가지가있다. 장점 배열을 사용하여 데이터를 저장하는 것입니다. 예를 들어, 메모리 레이아웃으로 인해 배열은 다음을 허용합니다. O (1) (일정한) 인덱스로 요소에 액세스할 때 시간 복잡도. 이는 요소에 무작위로 액세스해야 할 때 특히 유용합니다. 또한 배열은 다음 위치에 저장됩니다. 연속된 메모리 위치, 이는 특정 작업에서 더 나은 캐시 지역성과 전반적인 성능 향상으로 이어질 수 있습니다. 배열 사용의 또 다른 주목할만한 이점은 배열이 일단 선언되면 고정된 크기를 갖기 때문에 메모리 관리가 더 쉽고 예상치 못한 오버플로나 메모리 부족 오류를 방지한다는 것입니다.

주의 사항: 배열은 다음과 같은 시나리오에서 특히 유용합니다. 컬렉션의 크기는 미리 알려져 있으며 일정하게 유지됩니다.또는 삽입 및 삭제보다 임의 액세스가 더 자주 발생하는 경우입니다.

반면에 배열에는 자체 세트가 제공됩니다. 한계. 기존 어레이의 주요 제한 사항 중 하나는 고정 크기. 배열이 생성되면 크기를 변경할 수 없습니다. 이로 인해 메모리 낭비(배열이 너무 큰 경우) 또는 크기 조정 필요(배열이 너무 작은 경우)와 같은 문제가 발생할 수 있습니다. 게다가 배열 중간에 요소를 삽입하거나 삭제하려면 요소를 이동해야 하므로 다음과 같은 결과가 발생합니다. O (N) 이러한 작업의 시간 복잡성.

이 모든 것을 요약하자면, 이 가이드의 시작 부분에 있는 노래 재생 목록 예제를 사용하여 배열의 주요 특징을 설명해 보겠습니다. 배열은 다음과 같은 데이터 구조입니다.

  • 색인이 생성됨: 재생 목록의 각 노래에 숫자(1, 2, 3, ...)가 있는 것처럼 배열의 각 요소에는 인덱스가 있습니다. 그러나 대부분의 프로그래밍 언어에서 인덱스는 0부터 시작합니다. 따라서 첫 번째 항목은 인덱스 0에 있고 두 번째 항목은 인덱스 1에 있습니다.

  • 고정된 크기가 있음: 예를 들어 10곡에 대한 재생 목록을 생성하는 경우 한 곡을 먼저 제거하지 않으면 11번째 노래를 추가할 수 없습니다. 마찬가지로 배열의 크기는 고정되어 있습니다. 특정 크기의 배열을 생성하면 해당 용량보다 더 많은 항목을 추가할 수 없습니다.

  • 균질하다: 재생 목록의 모든 노래는 음악 트랙입니다. 마찬가지로 배열의 모든 요소는 동일한 유형입니다. 정수 배열이 있는 경우 갑자기 텍스트 문자열을 저장할 수 없습니다.

  • 직접 액세스 가능: 재생목록의 7번째 곡을 듣고 싶다면 해당 곡으로 바로 이동할 수 있습니다. 마찬가지로 배열의 경우 인덱스를 알고 있으면 모든 요소에 즉시 액세스할 수 있습니다.

  • 연속 메모리: 이것은 좀 더 기술적입니다. 컴퓨터 메모리에 배열이 생성되면 연속적인 메모리 블록을 차지합니다. 학교의 인접한 사물함처럼 생각하십시오. 각 사물함은 서로 옆에 있으며 사이에 간격이 없습니다.

파이썬과 배열

유연성과 사용 용이성으로 유명한 Python은 배열을 사용하는 다양한 방법을 제공합니다. Python에는 다른 언어처럼 기본 배열 데이터 구조가 없지만 유사하게 작동하고 확장된 기능까지 제공할 수 있는 강력한 대안을 제공합니다.

언뜻 보면, 파이썬의 목록 배열과 동의어로 보일 수 있지만 고려해야 할 미묘한 차이점과 뉘앙스가 있습니다.

명부 배열
내장된 Python 데이터 구조 Python에서는 기본이 아닙니다. `array` 모듈에서 나옵니다.
동적 크기 고정(미리 정의된) 크기
다양한 데이터 유형의 항목을 보유할 수 있습니다. 같은 종류의 물건을 보관하세요
조작을 위한 다양한 기본 제공 방법 제공 외부 모듈을 가져와야 함
O(1) 액세스 작업의 시간 복잡도 O(1) 액세스 작업의 시간 복잡도
더 많은 메모리 소비 메모리 효율성 향상

이 표를 보면 다음과 같은 질문이 자연스럽게 떠오릅니다. “언제 어느 것을 사용해야 할까요?”. 동적으로 늘리거나 줄일 수 있고 혼합된 데이터 유형을 보유할 수 있는 컬렉션이 필요한 경우 Python의 목록이 적합합니다. 그러나 동일한 유형의 요소를 사용하여 보다 메모리 효율적인 컬렉션이 필요한 시나리오의 경우 Python의 사용을 고려할 수 있습니다. array 모듈 또는 NumPy와 같은 외부 라이브러리.

XNUMXD덴탈의 정렬 Python의 모듈

대부분의 개발자는 Python에서 배열을 생각할 때 기본적으로 목록을 생각하는 경우가 많습니다. 그러나 Python은 내장된 배열을 통해 보다 전문화된 배열 구조를 제공합니다. array 기준 치수. 이 모듈은 Python에서 기본 C 스타일 데이터 유형의 공간 효율적인 저장소를 제공합니다.

Python 목록은 믿을 수 없을 정도로 다재다능하고 모든 유형의 개체를 저장할 수 있지만 때로는 과도할 수 있습니다. 특히 정수나 부동 소수점과 같은 기본 데이터 유형 모음만 저장해야 하는 경우에는 더욱 그렇습니다. 그만큼 array 모듈은 특정 데이터 유형에 대한 목록보다 메모리 효율적인 배열을 생성하는 방법을 제공합니다.

배열 생성

을 사용하려면 array 모듈을 먼저 가져와야 합니다.

from array import array

가져온 후에는 다음을 사용하여 배열을 만들 수 있습니다. array() 건설자:

arr = array('i', [1, 2, 3, 4, 5])
print(arr)

여기, 'i' 인수는 배열이 서명된 내용을 저장할 것임을 나타냅니다. 정수. 다음과 같은 여러 다른 유형 코드를 사용할 수 있습니다. 'f' 수레 및 'd' 복식용.

요소 액세스 및 수정

목록에서와 마찬가지로 배열의 요소에 액세스하고 수정할 수 있습니다.

print(arr[2]) 

이제 값을 다음과 같이 변경하여 요소를 수정해 보겠습니다. 6:

arr[2] = 6
print(arr) 

배열 메서드

XNUMXD덴탈의 array 모듈은 배열을 조작하는 여러 가지 방법을 제공합니다:

  • append() – 배열 끝에 요소를 추가합니다.

    arr.append(7)
    print(arr) 
  • extend() – 반복 가능한 요소를 끝에 추가합니다.

    arr.extend([8, 9])
    print(arr) 
  • pop() – 주어진 위치에서 요소를 제거하고 반환합니다.

    arr.pop(2)
    print(arr) 
  • remove(): 지정된 값의 첫 번째 항목을 제거합니다.

    arr.remove(2)
    print(arr) 
  • reverse(): 배열의 순서를 반대로 바꿉니다.

    arr.reverse()
    print(arr) 

참고 : 여기에 나열된 것보다 더 많은 방법이 있습니다. 다음을 참조하세요. 공식 파이썬 문서 사용 가능한 모든 메소드 목록을 보려면 array 기준 치수.

동안 array 모듈은 기본 데이터 유형을 저장하는 보다 메모리 효율적인 방법을 제공하므로 이를 기억하는 것이 중요합니다. 한계. 목록과 달리 배열은 동종의. 이는 배열의 모든 요소가 동일한 유형이어야 함을 의미합니다. 또한 저장만 가능합니다. 기본 C 스타일 데이터 유형 배열로. 사용자 정의 개체나 다른 Python 유형을 저장해야 하는 경우 목록이나 다른 데이터 구조를 사용해야 합니다.

NumPy 배열

Numerical Python의 약자인 NumPy는 Python의 수치 계산을 위한 기본 패키지입니다. 주요 기능 중 하나는 강력하다는 것입니다. N차원 배열 객체, 수학, 논리, 모양 조작 등을 포함하여 배열에 대한 빠른 작업을 제공합니다.

NumPy 배열은 Python의 내장 배열보다 더 다양합니다. array 모듈이며 데이터 과학 및 기계 학습 프로젝트의 필수 요소입니다.

NumPy 배열을 사용하는 이유는 무엇입니까?

가장 먼저 떠오르는 것은 성능. NumPy 배열은 C로 구현되며 최적화된 알고리즘과 연속 메모리 저장의 이점으로 인해 효율적인 메모리 저장과 더 빠른 작업이 가능합니다.

Python의 내장 목록과 배열은 XNUMX차원인 반면 NumPy 배열은 다차원, 행렬이나 텐서를 표현하는 데 이상적입니다.

모범 사례, 업계에서 인정하는 표준 및 포함된 치트 시트가 포함된 Git 학습에 대한 실습 가이드를 확인하십시오. 인터넷 검색 Git 명령을 중지하고 실제로 배움 이것!

마지막으로 NumPy는 다음을 제공합니다. 다양한 기능 기본 산술부터 고급 수학 연산, 재구성, 분할 등에 이르기까지 이러한 배열에 대한 작업을 수행합니다.

참고 : 데이터 크기를 미리 알면 배열(특히 NumPy)에 메모리를 미리 할당하면 성능이 향상될 수 있습니다.

NumPy 배열 만들기

NumPy를 사용하려면 먼저 NumPy를 설치해야 합니다(pip install numpy) 그런 다음 가져옵니다.

import numpy as np

가져온 후에는 다음을 사용하여 NumPy 배열을 만들 수 있습니다. array() 기능:

arr = np.array([1, 2, 3, 4, 5])
print(arr) 

다차원 배열을 만들 수도 있습니다.

matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)

이것은 우리에게 다음을 줄 것입니다:

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

배열을 생성할 수 있는 이러한 기본 방법 외에도 NumPy는 배열을 생성할 수 있는 다른 영리한 방법을 제공합니다. 그 중 하나는 arange() 방법. 정기적으로 증가하는 값으로 배열을 생성합니다.

arr = np.arange(10)
print(arr) 

또 하나는 linspace() 지정된 시작 값과 끝 값 사이에 동일한 간격으로 지정된 수의 요소로 배열을 생성하는 메서드:

even_space = np.linspace(0, 1, 5)
print(even_space) 

요소 액세스 및 수정

NumPy 배열의 요소에 액세스하고 수정하는 것은 직관적입니다.

print(arr[2]) arr[2] = 6
print(arr) 

다차원 배열에 대해서도 거의 동일한 작업을 수행합니다.

print(matrix[1, 2]) matrix[1, 2] = 10
print(matrix)

두 번째 행(색인)에 있는 요소의 값을 변경합니다. 1) 및 세 번째 열(색인 2):

[[1 2 3] [4 5 20] [7 8 9]]

배열의 모양 변경

NumPy는 배열을 조작하고 조작할 수 있는 다양한 기능과 방법을 제공합니다. 예를 들어 다음을 사용할 수 있습니다. reshape() 방법 배열의 모양을 변경. 간단한 배열이 있다고 가정해 보겠습니다.

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
print("Original Array:")
print(arr) 

그리고 우리는 그것을 3×4 행렬로 바꾸고 싶습니다. 당신이해야 할 일은 reshape() 원하는 크기가 인수로 전달된 메소드:


reshaped_arr = arr.reshape(3, 4)
print("Reshaped Array (3x4):")
print(reshaped_arr)

결과는 다음과 같습니다.

Reshaped Array (3x4):
[[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]]

행렬 곱셈

XNUMXD덴탈의 numpy.dot() 방법이 사용됩니다 행렬 곱셈. 두 배열의 내적을 반환합니다. XNUMX차원 배열의 경우, 내부 제품 배열의. 2차원 배열의 경우 다음과 같습니다. 행렬 곱셈, ND의 경우 합계 제품 첫 번째 배열의 마지막 축과 두 번째 배열의 마지막에서 두 번째 축에 걸쳐 있습니다.

그것이 어떻게 작동하는지 봅시다. 먼저 두 개의 1차원 배열의 내적(벡터의 내적)을 계산해 보겠습니다.

import numpy as np vec1 = np.array([1, 2, 3])
vec2 = np.array([4, 5, 6])
dot_product_1d = np.dot(vec1, vec2) print("Dot product of two 1-D arrays:")
print(dot_product_1d) 

결과는 다음과 같습니다.

Dot product of two 1-D arrays:
32

32 실제로 두 배열의 내적은 다음과 같습니다. (14 + 25 + 3*6). 다음으로 두 개의 2차원 배열의 행렬 곱셈을 수행할 수 있습니다.


mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[2, 0], [1, 3]])
matrix_product = np.dot(mat1, mat2) print("Matrix multiplication of two 2-D arrays:")
print(matrix_product) 

우리에게 줄 것입니다:

Matrix multiplication of two 2-D arrays:
[[ 4 6] [10 12]]

NumPy 배열은 Python의 내장 목록과 array 특히 과학 및 수학적 계산을 위한 모듈입니다. NumPy 라이브러리에서 제공하는 풍부한 기능과 효율성이 결합되어 Python에서 수치 연산을 수행하려는 모든 사람에게 없어서는 안 될 도구입니다.

결론

컴퓨터 과학 및 프로그래밍의 초석인 배열은 다양한 응용 프로그램과 영역에서 그 가치가 계속해서 입증되었습니다. Python에서 이 기본 데이터 구조는 목록과 같은 다양한 구현을 통해 array 모듈과 강력한 NumPy 어레이는 개발자에게 효율성, 다양성 및 단순성의 혼합을 제공합니다.

이 가이드 전체에서 배열의 기본 개념부터 Python의 실제 적용까지 살펴보았습니다. 우리는 메모리 연속적 특성을 지닌 배열이 어떻게 빠른 액세스 시간을 제공하는지, 그리고 Python의 동적 목록이 유연성을 추가하는 방법을 살펴보았습니다. 우리는 또한 배열이 수치 계산을 위한 강력한 도구로 변환되는 NumPy의 전문화된 세계를 탐구했습니다.

타임 스탬프 :

더보기 스택카부스