-
[자료구조] list 와 Array(배열)지식저장소 2023. 6. 27. 23:24728x90
1. 파이썬 리스트
- 파이썬에서 리스트는 내장된 데이터 구조로 items의 collection을 가진다.
- 리스트는 "[ ]" 안에 묶인다. ex) [1, 2, 3]
- 리스트는 변경이 가능하다. (추가 및 제거 가능)
- 리스트는 중복이 가능하다. ex) [1, 1, 1]
- 리스트는 여러가지 데이터 타입을 넣을 수 있다. str, int 등등
2. 파이썬 배열
- 파이썬에서 배열도 리스트랑 같이 내장된 데이터 구조로 items의 collection을 가진다.
- 리스트의 특징과 유사하다. ex) 대괄호, 정렬, 변경가능 ,중복가능
- 반면, 넘파이 어레이는 숫자형과 문자열이 섞이면 모두 문자열로 전환됩니다.(한가지 자료형만 허용한다.)
- Numpy
import numpy as np array = np.array(["1", 2, 3]) print(array)
['1' '2' '3'] <class 'numpy.str_'>
선언 조건
2차원 이상의 배열 구조를 나타낼 수 있지만 문제는 Numpy에서 내부 배열의 크기가 같아야한다.
list_a = [[1], [2, 3], [4, 5, 6]] # 가능O array_b = np.array([[1], [2, 3], [4, 5, 6]]) # 개수가 달라서 array 선언 불가능 #array_b 출력결과 Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.
연산
리스트 연산
- 리스트의 연산은 데이터를 이어 붙이는 concatenate를 수행합니다.
- 다른 연산은 허용X
하지만, 곱셉의 경우 원소 복사 수행합니다. ex) [1, 2, 3] * 3 = [1, 2, ,3, 1, 2, 3, 1, 2, 3]
Numpy 연산
- 항목 간 연산을 수행합니다.
- 리스트와 다르게 다른 사칙연산이 가능합니다.
- 실수에 대한 사칙 연산도 가능하다. ex) a + 2
- 여기서 연산을 할때 각 객체의 개수는 같아야 합니다.
#리스트 연산 a = [1, 5, 7] b = [2, 4, 8] a+b # [1, 5, 7, 2, 4, 8] a*3 # [1, 5, 7, 1, 5, 7, 1, 5, 7] # Numpy 연산 a = np.array([1, 5, 7]) b = np.array([2, 4, 8]) a+b # array([3, 9, 15]) a+2 # array([3, 7, 9]) a*3 # array([3, 15, 21])
메소드
자료형 종류가 다르기 때문에 지원하는 메소드 종류도 다릅니다.
리스트 : append, extend, remove 등등 가능합니다. (해당 메소드는 Numpy에서 불가능)
넘파이: mean, argmax, round 등등 사용가능합니다 (해당 메소드는 list에서 불가능)
연산 속도
같은 연산의 경우 일반적으로 Numpy가 연산에 최적화 되어있습니다.
import time # 리스트 연산 속도 a = list(range(10 ** 8)) start = time.time() for i in range(10 ** 8): a[i] *= 2 end = time.time() print(end - start) # 약 17.35초 # 어레이 연산 속도 a = np.array(range(10 ** 8)) start = time.time() a = a * 2 end = time.time() print(end - start) # 약 1.35초
Numpy가 약 13배정도 연산속도가 빠른 것으로 보여집니다.
728x90'지식저장소' 카테고리의 다른 글
[Coursera] 2. Unsupervised Learning (Andrew Ng) (0) 2023.07.06 [Coursera] 1. Supervised Learning (Andrew Ng) (0) 2023.07.06 [자료구조] sort 정렬 알고리즘 (0) 2023.06.30 카메라 캘리브레이션(Camera Calibration) (0) 2023.06.27 [Ubuntu 세팅] 1.Darknet위한 초기세팅(Ubuntu20.04) (0) 2022.12.29