numpy array와 python list의 차이 - 코드잇 (+pandas DataFrame)

bearwoong

·

2020. 4. 3. 07:15

728x90

numpy array와 python list의 차이 - 코드잇 (+pandas DataFrame)

numpy array와 python list 의 차이

1. numpy array는 numpy array끼리 연산이 가능하지만 Python list는 덧셈만 가능하다.

numpy array 에 numpy array를 더해주면 같은 인덱스에 있는 값들 끼리 더해진다.
예를들어 [10, 5, 3, 7, 1, 5] + [10, 5, 3, 7, 1, 5] = [20, 10, 6, 14, 2, 10] 이런식으로 덧셈 계산을 할 수 있다.

반면 Python list에서는 두 리스트의 값들이 한 리스트로 들어간다.
예를들어 [10, 5, 3, 7, 1, 5] + [10, 5, 3, 7, 1, 5] = [10, 5, 3, 7, 1, 5, 10, 5, 3, 7, 1, 5] 이런식으로 앞의 리스트 뒤에 뒤의 리스트 값이 붙어서 한 리스트로 만들어진다.

같은 맥락으로 numpy array는 numpy array 끼리 뺄셈, 곱셈, 나눗셈이 가능하다. 같은 인덱스에 있는 값들끼리 연산해준다. Pythom list는 리스트끼리 뺄셈, 곱셈, 나눗셈을 하면 오류가 난다.

import numpy as np

arr1 = np.array([10, 5, 3, 7, 1, 5])
arr2 = np.array([10, 5, 3, 7, 1, 5])

print (f'numpy array 끼리 덧셈 = {arr1+arr2}')
print (f'numpy array 끼리 뺄셈 = {arr1-arr2}')
print (f'numpy array 끼리 곱셈 = {arr1*arr2}')
print (f'numpy array 끼리 나눗셈 = {arr1/arr2}')

numpy array 연산 결과

list1 = [10, 5, 3, 7, 1, 5]
list2 = [10, 5, 3, 7, 1, 5]

print (f'list 끼리 덧셈 = {list1+list2}')
print (f'list 끼리 뺄셈 = {list1-list2}')
print (f'list 끼리 곱셈 = {list1*list2}')
print (f'list 끼리 나눗셈 = {list1/list2}')

Python list 연산 결과

2.  numpy array는 array 전체에 연산이 가능하지만 Python list는 곱셈만 가능하다.

numpy array와 숫자의 연산을 하면 array에 들어가있는 각 값에 연산이 된다.
예를들어 [10, 5, 3, 7, 1, 5] + 5 = [15, 10, 8, 12, 6, 10] 와 같이 array 안에 들어가있는 각 값에 +5가 된다.
덧셈뿐 아니라 뺄셈, 곱셈, 나눗셈 모두 우리가 예상하는 결과대로 값이 나온다.

반면 Python list는 곱셈만 가능한데 이도 array처럼 각 값에 곱을 해주는 것이 아니라 list의 요소를 반복한다.
예를들어 [10, 5, 3, 7, 1, 5] * 2 = [10, 5, 3, 7, 1, 5, 10, 5, 3, 7, 1, 5] 이런식으로 나온다.

import numpy as np

arr1 = np.array([10, 5, 3, 7, 1, 5])

print (f'array 덧셈 = {arr1+5}')
print (f'array 뺄셈 = {arr1-5}')
print (f'array 곱셈 = {arr1*3}')
print (f'array 나눗셈 = {arr1/2}')

numpy array 연산 결과

list1 = [10, 5, 3, 7, 1, 5]

print (f'list 곱셈 = {list1*3}')
print (f'list 덧셈 = {list1+5}')
print (f'list 뺄셈 = {list1-5}')
print (f'list 나눗셈 = {list1/2}')

Python list 연산 결과

3. 성능차이

numpy array가 python list에 비해 문법이 간단하고 성능이 뛰어나다.
예를들어 1억개의 요소가 있는 기본 python list에 곱하기 2를 하려면 반복문을 1억번 돌려야 하는데 numpy array는 그냥 * 2 만 붙여주면 된다. 문법이 간단할 뿐만 아니라 실제 실행했을 때도 numpy array가 훨씬 짧은 시간에 연산을 마친다.

성능차이가 나는 이유를 간단히 말하면 값들이 저장되는 방식에 차이가 있기 때문이다. python list는 다양한 자료형이 저장가능 하지만 numpy array는 같은 자료형만 넣을 수 있다. 따라서 python list는 값을 추가하고 제거하는 일에 쓰고, numpy array는 수치 계산이 많고 복잡할 때나 행렬같은 다차원 배열을 쓸 때 사용하면 된다.

pandas 의 DataFrame

python list나 numpy array와 비슷하게 pandas DataFrame 도 여러 값들을 저장할 때 쓰인다.
DateFrame 은 표형식의 데이터를 담기위한 자료형으로 2차원 numpy array에 부가적인 기능이 추가된 것이다. 
(DataFrame이 numpy array를 기반으로 만들어져 있어서 pandas를 쓰려면 numpy가 먼저 설치되어 있어야한다.)

예를들어 각 행과 열에 이름을 붙여줄 수 있어서 숫자인덱스가 아닌 정해준 이름으로 값을 찾을 수 있다. numpy array에서는 숫자 인덱스만 가능했다. 또 2차원 numpyarray에서는 모든 값이 같은 자료형이어야 하는 제약이 있었지만 DataFrame 에서는 다양한 자료형의 데이터를 담을 수 있다.

반응형