ํ๊ต์์ ๊ฑฐ์ ์ฒ์์ผ๋ก ๋ฐฐ์ฐ๋ ๋ฃจํ๋ ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฃจํ์ ๋ํด ๋ฐฐ์ด๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ๋ณต ์์ ์ด ์์ ๋๋ง๋ค ๋ฃจํ๋ก ๊ตฌํ์ ํ๋๊ฒ ๊ฐ๋ค. ์ต๊ทผ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด์ ๋ง์ ์์ ๋ฐ๋ณต(์๋ฐฑ๋ง/์์ญ์ต ํ)์ผ๋ก ์์ ํ ๋ ๋ฃจํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๋ด์ด ๋์๋ค. ๊ทธ๋์ ๋ฐฐ์ ์ง๋ง ์ ์์ฐ๊ณ ์๋ numpy๋ฅผ ์ฌ์ฉํ์ฌ ์ผ์ ์งํํ๊ฒ ๋์๋ค. ์ฌ๊ธฐ์ ๋ํด์ ์์ด๋ฒ๋ฆฌ์ง ์๊ฒ ์ ์ด๋ณด๋ ค๊ณ ํ๋ค.
import time
start = time.time()
# iterative sum
total = 0
# iterating through 1.5 Million numbers
for item in range(0, 1500000):
total = total + item
print('sum is:' + str(total))
end = time.time()
print(end - start)
#1124999250000
#0.14 Seconds
import numpy as np
start = time.time()
# vectorized sum - using numpy for vectorization
# np.arange create the sequence of numbers from 0 to 1499999
print(np.sum(np.arange(1500000)))
end = time.time()
print(end - start)
##1124999250000
##0.008 Seconds
๊ฐ๋จํ๊ฒ ๋จ์ ๋ง์ ์ธ ์ฝ๋์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ , ๋ฒกํฐํ๋ ๋ฒ์ ํจ์๋ฅผ ์ฌ์ฉํ ๋ฐ๋ณต์ ๋นํด ์คํ ์๊ฐ์ด ์ฝ 18๋ฐฐ ๋ ์งง๋ค. ์ด ์ฐจ์ด๋ Pandas DataFrame์ ์ฌ์ฉํ ๋ ๋ ์ฌํ๊ฒ ๋์จ๋ค.
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0, 50, size=(5000000, 4)), columns=('a','b','c','d'))
df.shape
# (5000000, 5)
df.head()
๋จผ์ ๋น๊ตํด๋ณด๊ธฐ ์ํด ๋ฐ์ดํฐํ๋ ์์ ๋ง๋ค์๋ค.
import time
start = time.time()
# Iterating through DataFrame using iterrows
for idx, row in df.iterrows():
# creating a new column
df.at[idx,'ratio'] = 100 * (row["d"] / row["c"])
end = time.time()
print(end - start)
### 109 Seconds
start = time.time()
df["ratio"] = 100 * (df["d"] / df["c"])
end = time.time()
print(end - start)
### 0.12 seconds
DataFrame์ ์ฌ์ฉํ๋ฉด ์์ฒญ๋๊ฒ ๋นจ๋ผ์ง ์ ์๋ค. ๋ฒกํฐํ ์์ ์ ์์๋๋ ์๊ฐ์ for๋ฌธ์ ๋นํด 1000๋ฐฐ์ ๋ ๋น ๋ฅด๋ค.
import time
start = time.time()
# Iterating through DataFrame using iterrows
for idx, row in df.iterrows():
if row.a == 0:
df.at[idx,'e'] = row.d
elif (row.a <= 25) & (row.a > 0):
df.at[idx,'e'] = (row.b)-(row.c)
else:
df.at[idx,'e'] = row.b + row.c
end = time.time()
print(end - start)
### Time taken: 177 seconds
start = time.time()
df['e'] = df['b'] + df['c']
df.loc[df['a'] <= 25, 'e'] = df['b'] -df['c']
df.loc[df['a']==0, 'e'] = df['d']end = time.time()
print(end - start)
## 0.28007707595825195 sec
๋ฒกํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ฉํ๋๊ฒ if-else ๋ฌธ์ ์ฌ์ฉํ๋ for๋ฌธ์ ๋นํด 600๋ฐฐ ๋น ๋ฅด๋ค.
๋๋ ์์ง ์ ๋๋ก ๊ณต๋ถ๋ฅผ ์ํด์ ์ฌ์ฉํ๊ธฐ์ ์ด๋ ต๊ณ , ์ ๋๋ก ์๋ ค์ฃผ๊ธฐ๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ๋์ฉ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋๊ฑด ์๊ฐ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ณต๋ถ๋ฅผ ๋ง์ด ํด์ ์์์ ์๊ปด์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค.
'๐ผ๐ > ๐๐ฉ๐ช๐๐ฎ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ์ด์ฌ ๊ฐ์ข OCR ์ฌ์ฉํด๋ณด๊ธฐ ๋ฐ ๋ค์ด๋ฒ ํด๋ผ์ฐ๋ AI OCR ์ฌ์ฉ๋ฒ (2) (0) | 2023.04.05 |
---|---|
๋จธ์ ๋ฌ๋(CatBoost, LightGBM, XGBoost) ๊ณต๋ถํ๊ธฐ (0) | 2023.03.14 |
AI ํ์คํ์ ๋ํด์ (0) | 2023.03.13 |
๋๊ธ