본문 바로가기
python/numpy

[python] [numpy] list 와 numpy array 차이

by 설화님 2024. 1. 18.

파이썬 list와 numpy array 차이 비교

이번 시간에는 얼핏 비슷해 보이지만 완전히 기능이 다른

파이썬의 리스트와 넘파이 어레이의 차이를 간단히 비교해보도록 하겠습니다.

 

파이썬 리스트 vs 어레이 차이 1 : 선언 조건

리스트는 숫자형, 문자열 등 모든 자료를 타입을 보존하여 가질 수 있습니다.

(여러 가지 자료형 허용)

 

반면, 넘파이 어레이는 숫자형과 문자열이 섞이면 모두 문자열로 전환됩니다.

(한 가지 자료형만 허용)

import numpy as np

a = [1, 3, 5, 'a', 'b'] # 1, 3, 5는 숫자형, 'a', 'b'는 문자열

b = np.array([1, 3, 5, 'a', 'b']) # '1', '3', '5', 'a', 'b'의 문자열로 전환

2차원 이상의 배열 구조에서 리스트는 내부 배열에서 원소 개수가 달라도 됩니다.

 

그러나, 넘파이 어레이는 내부 배열 내 원소 개수가 모두 같아야 합니다.

a = [[1], [3, 5], [2, 4, 6]] # 문제 X

b = np.array([[1], [3, 5], [2, 4, 6]]) # 개수가 달라서 array 선언 불가능
# array([list([1]), list([3, 5]), list([2, 4, 6])], dtype=object)

 

 

파이썬 리스트 vs 어레이 차이 2 : 연산

python list는 덧셈 시 항목을 이어 붙이는 concatenate를 수행합니다.

또한, 리스트 간의 다른 연산은 허용하지 않습니다.

곱셈은 자연수 곱셈은 가능하며, 원소 복사를 의미합니다.

 

numpy array는 덧셈 시 항목 간 덧셈을 수행하며,

이는 다른 사칙연산도 마찬가지 입니다.

또한, 실수에 대한 사칙연산 과정도 원소 전체의 값에 대하여 수행이 가능합니다.

# 리스트 연산

a = [1, 3, 5]
b = [2, 4, 6]

a + b # [1, 3, 5, 2, 4, 6]

# 허용하지 않음 : a - b, a * b, a / b

a * 3 # [1, 3, 5, 1, 3, 5, 1, 3, 5]
# 넘파이 어레이 연산

a = np.array([1, 3, 5])
b = np.array([2, 4, 6])

a + b # array([ 3,  7, 11])
a * b # array([ 2, 12, 30])

a + 2 # array([3, 5, 7])
a * 3 # array([ 3,  9, 15])
 

파이썬 리스트 vs 어레이 차이 3 : 메소드

자료형 종류가 다르기때문에 자료형에서 지원하는 메소드의 종류도

당연히 다릅니다.

 

예를 들어, 리스트에서는 mean, argmax, round 등 어레이 메소드를 지원하지 않고,

어레이에서는 append, remove, extend 등 리스트 메소드를 지원하지 않습니다.

두 자료형의 자세한 메소드의 종류는 여기서 다루지는 않겠습니다.

a = [1, 3, 5]
b = np.array([1, 3, 5])

# 리스트 메소드(b.append(7) 등은 불가능)
a.append(7)
a.extend([9])
a.remove(9)

# 어레이 메소드(a.mean() 등은 불가능)
b.mean()
b.argmax()
b.round()

 

 

파이썬 리스트 vs 어레이 차이 4 : 연산 속도

같은 연산을 수행하는 경우, 일반적으로

numpy array가 연산 최적화가 더 잘 되어있습니다.

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초

1억개의 원소에 값을 전부 2배로 곱하는 연산을 수행한 경우,

numpy array에서의 연산이 약 10배 이상 빨랐습니다.

'python > numpy' 카테고리의 다른 글

numpy 문법  (1) 2024.01.03
Numpy 에 대해 예제로 알아보자.  (2) 2024.01.03