본문 바로가기
파이썬

파이썬 리스트 요소 끼리 연산하는 방법 (zip, numpy)

by RWriter 2023. 12. 2.
반응형

안녕하세요. 파이썬에서 리스트 요소 간의 연산을 수행하는 방법은 여러 가지가 있습니다.

 

가장 기본적인 방법은 아래처럼 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 함수 사용

두 리스트 list1list2가 있습니다. 파이썬의 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)은 배열이나 데이터 시퀀스에 대해 일괄 처리되는 연산을 말합니다. 배열의 각 요소에 대해 반복적인 연산을 효율적으로 수행할 수 있게 해줍니다.

벡터화 연산의 특징

  1. 속도 향상: 벡터화 연산은 일반적인 for 루프를 사용한 반복 연산에 비해 훨씬 빠릅니다. 이는 벡터화 연산이 하드웨어 수준에서 최적화되어 있기 때문입니다.
  2. 코드 간결성: 벡터화를 사용하면 복잡한 연산을 매우 간결하고 직관적인 코드로 표현할 수 있습니다. 이는 코드의 가독성을 높이고 오류 가능성을 줄입니다.
  3. 배열 기반 연산: 벡터화는 배열이나 리스트와 같은 데이터 구조에 적용됩니다. 이때 연산은 배열의 각 요소에 동시에 적용됩니다.

벡터화 연산의 장점

  • 효율성: 루프를 사용하지 않고 배열 전체에 대한 연산을 쉽게 수행할 수 있습니다.
  • 성능: 하드웨어 수준의 최적화로 인해 빠른 연산 속도를 제공합니다.
  • 간결성: 코드가 더 짧고 이해하기 쉬워집니다.

벡터화 연산은 데이터 과학, 머신 러닝, 과학 계산 등 여러 분야에서 널리 사용되며, 효율적인 데이터 처리를 위해 중요한 개념입니다. NumPy와 같은 라이브러리를 사용하면 이러한 벡터화 연산을 쉽게 활용할 수 있습니다.

반응형

댓글