일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파파고 꿀팁
- 리눅스#모의해킹#리눅스명령어#head 명령어
- 파이썬 채팅
- 파이썬 음성인식
- 파이썬 엑셀 파일 읽고 쓰기
- 논문번역 꿀팁
- 파이썬 예시
- 파이썬 #
- 크롬오류#크롬검색어자동완성끄기#검색어자동완성오류#검색어자동완성 제거#검색어 노란선#검색어반복입력
- 파이선 행
- 리눅스기초#리눅스명령어#리눅스 tail#tail#모의해킹 리눅스
- 통계 #ROC #TPR #FPR #TNR #이진분류 #Accuracy #Recall
- 파이썬
- PDF 개행문자
- 파이썬 텍스트 변환 #파이썬 공부
- 파이썬 파일 전송
- ROS #Robotics #ROS기초
- 패스트 캠퍼스 #자율주행 #비전
- QGC#QGrouncControl#GLIB오류
- 파이썬#subprocess#communicate()
- 파이썬 음성파일 텍스트 변환
- 파이썬 프로젝트
- 파이썬#파이썬경로#파이썬폴더#파이썬디렉토리
- 파파고 번역
- pdf 번역
- 파이썬 유튜브
- 스트림 암호 one-time-pad 공격#보안#암호
- 파이썬 #파이썬프로젝트 #파이썬 예시 #파이썬 파일경로 #파이썬 자동화
- 파이썬 열
- ROS #spin() #spinOnce() #ROS기초
개발자비행일지
[Python] List끼리 연산 | zip | numpy | map 본문
여러 가지 상황에서 리스트끼리의 연산이 필요할 때가 있다.해당 글은 리스트끼리의 더하기, 빼기, 곱하기 등의 연산을 위한 3가지 방법에 대해 정리하였다.
목차
내장함수 zip
1-1) 1차원 리스트
1-2) 2차원 리스트
numpy 모듈
내장함수 map
1-1) 1차원 리스트
1-2) 2차원 리스트
내장함수 zip
zip은 여러 배열을 튜플로 묶어주는 연산을 해준다.
파이썬 내장함수이므로 따로 모듈을 import해줄 필요는 없다.
1차원 리스트
다음과 같이 원소의 길이가 같은 1차원 배열(리스트)가 a, b가 있을 때, 동일한 위치에 있는 원소를 튜플로 묶어 리턴한다.
iterable한 결과(zip 객체)로 리턴하므로 꼭 for문이나 iterator와 함께 사용되어야 한다.
- iterable, iterator 개념을 잘 모르겠다면 검색하여 찾아보는 것을 권장
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 0]
print([i for i in zip(a, b)])
#결과
#[(1, 6), (2, 7), (3, 8), (4, 9), (5, 0)]
해당 결과를 이용하여 두 값에 대한 연산을 진행하면 된다!
# 두 배열의 각 자리값끼리 곱한 값의 총합 구하기
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 0]
result = [i*j for i, j in zip(a, b)]
print("result : ", result, ", sum : ", sum(result))
#결과
#result : [6, 14, 24, 36, 0], sum : 80
2차원 리스트
그렇다면 2차원 리스트에서 zip은 어떻게 동작할까? 1차원 배열과 같이 for문 하나로 가능할까?
a = [[1, 2], [2, 3]]
b = [[3, 4], [5, 6]]
#단순 zip
print([i for i in zip(a, b)])
#결과
#[([1, 2], [3, 4]), ([2, 3], [5, 6])]
그렇지 않다. 2차원 배열의 각 원소 간 연산을 처리하기 위해서 2중으로 for문이 필요하다
a = [[1, 2], [2, 3]]
b = [[3, 4], [5, 6]]
result = []
#각 자리 원소를 곱한 것들의 총 합
for i in range(len(a)):
temp = [i * j for i, j in zip(a[i], b[i])]
result.append(temp)
print("result : ", result)
# result : [[3, 8], [10, 18]]
zip을 활용한 예시: 퍼셉트론
리스트의 각 요소를 곱한 값을 더하는 작업은 퍼셉트론 같은 간단한 인공신경망 모델에서도 사용된다. 아래는 zip을 이용하여 퍼셉트론의 출력을 계산하는 예시이다.
def activation(s):
return 1 if s > 0 else 0
def perceptron(w, x):
# 두 배열의 각 자리값끼리 곱한 값의 총합 구하기
output = sum(wi * xi for wi, xi in zip(w, [1] + x))
y = activation(output)
return y, output
# x_1, x_2, x_3, x_4의 값을 순서대로 list 형태로 저장
x = [1, 2, 3, 4]
# w_0, w_1, w_2, w_3, w_4의 값을 순서대로 list 형태로 저장
w = [2, -1, 1, 3, -2]
# 퍼셉트론의 결과를 출력
y, output = perceptron(w, x)
print('output: ', output)
print('y: ', y)
#결과
# output: 4
# y: 1
이 예시에서 zip은 다음과 같이 동작한다:
- w[0] * 1 -> 2 * 1 = 2
- w[1] * x[0] -> -1 * 1 = -1
- w[2] * x[1] -> 1 * 2 = 2
- w[3] * x[2] -> 3 * 3 = 9
- w[4] * x[3] -> -2 * 4 = -8
결국, 2 - 1 + 2 + 9 - 8 = 4
이렇게 zip을 활용하여 여러 리스트의 요소들을 간단하게 연산할 수 있다.
numpy 모듈
numpy 모듈에 multiply 함수를 이용해서 두 리스트 사이에 연산을 수행할 수 있다.
다음 함수를 이용하여 add(), substract(), multiply(), divide() 각각 더하기, 빼기, 곱하기, 나누기를 수행할 수 있다.
import numpy
a = numpy.array([1, 2, 3])
b = numpy.array([4, 5, 6])
# add
print(a + b)
#[5 7 9]
# substract
print(numpy.subtract(a, b))
#[-3 -3 -3]
# multiply
print(numpy.multiply(a, b))
#[ 4 10 18]
# divide
print(numpy.divide(a, b))
#[0.25 0.4 0.5 ]
이 외에도 numpy를 이용한 다양한 리스트 연산은 공식 사이트나 여러 블로그들을 참고하기 바랍니다.
내장 함수 map
map 함수는 숫자형 문자열을 입력받을 때 주로 사용했을 텐데 리스트 연산으로도 사용할 수 있습니다.
map(function, iterable) 형태로, iterable에는 꼼마(,)로 여러 개의 iterable 즉 튜플이나 리스트가 자리할 수 있습니다.
a = [1, 2, 3]
b = [4, 5, 6]
print(list(map(lambda x, y: x*y, a, b)))
#[4, 10, 18]
2차원 리스트
zip 함수 때와 마찬가지로 2차원 배열에서는 for문을 이용하여 각 리스트를 돌아가며 연산한다.
a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
result = []
for i in range(len(a)):
result.append(list(map(lambda x, y: x*y, a[i], b[i])))
print(result)
#[[5, 12], [21, 32]]
💡궁금한 사항이나 문제점 있으면 주저 말고 댓글 달아주세요! 읽어주셔서 감사합니다.
REFERENCE
'▶ Python' 카테고리의 다른 글
파이썬, 파이썬으로 유튜브 동영상 텍스트 변환하기 (0) | 2023.07.25 |
---|---|
파이썬 프로젝트, 음성 파일 텍스트로 변환하기 (0) | 2023.07.25 |
파이썬 채팅, 다중 채팅, gui, 파일 전송 (0) | 2023.07.20 |
파이썬 엑셀, 텍스트 파일로 엑셀 파일 만들기 (0) | 2023.07.19 |
파이썬 엑셀, 특정 횡과 열의 데이터 읽고 쓰기 (0) | 2023.07.19 |