반응형
Python은 아무래도 컴파일 되는 것이 아닌, 스크립트 언어다 보니
단순 반복연산에 대한 for loop는 상당히 느립니다.
따라서 map, filter, reduce 등으로 대체하는 것을 권장하고 있는데,
세 가지 문법에 대해서 가볍게 정리해보겠습니다.
import math
import time
import numpy as np
# 0 <= x < 100 사이 값을 1000개 생성
Data = np.random.randint(0, 100, 1000).tolist()
# Regular function
def square(x):
return x*x
# Lambda function
Square_lambda = lambda x: x*2
For Loop와 List comprehension
# 1. For loop
result = list()
for Integer in Data:
result.append(square(Integer))
# 2. List comprehension
result = [square(Integer) for Integer in Data]
Map function
# Map function의 parameter는 map(function, iterable) 형태로 되어있다.
# iterable object (list, tuple, set 등의 데이터) 에 대해 function을 모두 적용해준다.
result = list(map(square, Data))
result = list(map(Square_lambda, Data))
Filter function
# filter의 parameter는 filter(function, iterable) 형태로 되어있다.
# filter 안에 들어가는 function은 boolean을 리턴하는 함수 형태여야 한다.
def condition(x):
return x < 50
condition_lambda = lambda x: x<50
result = list(filter(condition, Data))
result = list(filter(condition_lambda, Data))
Reduce function
# reduce도 마찬가지로 reduce(func, iterable) 형태로 생겼습니다.
# 모든 데이터에 대해 동일한 function을 cumulative하게 적용하는 것 입니다.
from functools import reduce
Data = [1, 2, 3, 4, 5]
# With Lambda function
reduce(lambda x,y: x+y, Data)
# return 15
# reduce의 function이 어떻게 동작하는지 출력과 함께 보기
def addition(x, y):
print(x, y)
return x+y
reduce(addition, Data)
In [84]: reduce(addition, input_list)
1 2
3 3
6 4
10 5
Out[84]: 15
'Programing > Python programming' 카테고리의 다른 글
tf.keras로 Embedding layer 뜯어보기, 구현해보기 (0) | 2023.03.08 |
---|---|
tf.keras에서 Transformer의 self attention 및 중요도 (0) | 2023.02.05 |
tf.Keras 기본코드로 이해하는 Transformer (0) | 2022.10.21 |
Deep Attention-Sampling Models: 큰 이미지의 End-to-end 학습 (0) | 2019.08.10 |
Multi-view image deep learing with CNN-LSTM (0) | 2019.04.03 |