안녕하세요. 파이썬에서 리스트 요소 간의 연산을 수행하는 방법은 여러 가지가 있습니다.
가장 기본적인 방법은 아래처럼 for 루프를 사용하여 각 요소에 대한 연산을 수행하는 것입니다.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
product = []
for (i, a) in enumerate(list1):
product.append(a * list2[i])
print(product) # [4, 10, 18]
파이썬은 워낙 간결한 언어라서 어떤 방법을 사용해도 다른 언어들보다 보일러 플레이트 코드가 적긴 하지만,
파이썬이 제공하는 다른 문법들이나 라이브러리를 사용하면 좀더 짧고 간결하고 성능면에서도 효과적인 코드를 작성할 수 있습니다~
1. List Comprehension 과 zip 함수 사용
두 리스트 list1과 list2가 있습니다. 파이썬의 list comprehension 문법과 zip 함수를 사용하면 두 리스트 요소간 연산을 단 한줄에도 표현할 수 있습니다.
zip 함수는 옷 점퍼의 지퍼를 생각하면 이해가 쉽습니다. 두개의 배열을 같은 순서의 요소들끼리 튜플로 짝지은 하나의 리스트를 반환하는 함수입니다.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 곱셈
product = [a * b for a, b in zip(list1, list2)]
print(product) # [4, 10, 18]
# 나눗셈
division = [a / b for a, b in zip(list1, list2) if b != 0]
print(division) # [0.25, 0.4, 0.5]
# 뺄셈
subtraction = [a - b for a, b in zip(list1, list2)]
print(subtraction) # [-3, -3, -3]
2. NumPy를 사용한 방법
NumPy를 사용하면 같은 연산을 더 간결하게 수행할 수 있습니다. 먼저 numpy 모듈을 설치하고 임포트해야 합니다.
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
# 곱셈
product = array1 * array2
print(product) # [4, 10, 18]
# 나눗셈
division = array1 / array2
print(division) # [0.25, 0.4, 0.5]
# 뺄셈
subtraction = array1 - array2
print(subtraction) # [-3, -3, -3]
NumPy는 벡터화 연산을 지원하여 코드가 더 간결하고 실행 속도도 빠릅니다. 리스트보다는 NumPy 배열을 사용하는 것이 대부분의 수치 계산에서 훨씬 효율적입니다.
주의사항
- 리스트의 길이가 서로 다를 경우, zip 함수는 더 짧은 리스트의 길이에 맞춰서 작동합니다.
- NumPy를 사용할 때는 배열의 모든 요소가 숫자여야 합니다. 그렇지 않으면 에러가 발생할 수 있습니다.
필요에 따라 적절한 방법을 선택하여 사용하시면 됩니다.
참고 벡터화 연산이란?
벡터화 연산(Vectorized Operation)은 배열이나 데이터 시퀀스에 대해 일괄 처리되는 연산을 말합니다. 배열의 각 요소에 대해 반복적인 연산을 효율적으로 수행할 수 있게 해줍니다.
벡터화 연산의 특징
- 속도 향상: 벡터화 연산은 일반적인 for 루프를 사용한 반복 연산에 비해 훨씬 빠릅니다. 이는 벡터화 연산이 하드웨어 수준에서 최적화되어 있기 때문입니다.
- 코드 간결성: 벡터화를 사용하면 복잡한 연산을 매우 간결하고 직관적인 코드로 표현할 수 있습니다. 이는 코드의 가독성을 높이고 오류 가능성을 줄입니다.
- 배열 기반 연산: 벡터화는 배열이나 리스트와 같은 데이터 구조에 적용됩니다. 이때 연산은 배열의 각 요소에 동시에 적용됩니다.
벡터화 연산의 장점
- 효율성: 루프를 사용하지 않고 배열 전체에 대한 연산을 쉽게 수행할 수 있습니다.
- 성능: 하드웨어 수준의 최적화로 인해 빠른 연산 속도를 제공합니다.
- 간결성: 코드가 더 짧고 이해하기 쉬워집니다.
벡터화 연산은 데이터 과학, 머신 러닝, 과학 계산 등 여러 분야에서 널리 사용되며, 효율적인 데이터 처리를 위해 중요한 개념입니다. NumPy와 같은 라이브러리를 사용하면 이러한 벡터화 연산을 쉽게 활용할 수 있습니다.
'파이썬' 카테고리의 다른 글
IndentationError: unindent does not match any outer indentation level (0) | 2023.12.04 |
---|---|
SyntaxError: unexpected EOF while parsing (1) | 2023.12.04 |
파이썬 리스트 오름차순 정렬하는 방법 4가지 (0) | 2023.12.02 |
파이썬에서 특정 인덱스 제거하는 방법 두가지 (1) | 2023.12.01 |
파이썬 리스트 count 방법과 참고사항 (0) | 2023.11.30 |
댓글