반응형
반응형

안녕하세요. PSYda 입니다.

최근 Nomad Coders 의 "React JS로 웹서비스 만들기" 과정을 통해 React를 스터디 하고 있습니다. 강의를 들으며 제가 이해한 내용을 정리하여 올릴 예정입니다. 

 

먼저 강의에 대해 간단히 소개하면, 총 25개 강의로 구성되어 있으며 한 강의당 10분 내외로 듣기에 부담이 없어 좋습니다. 

 

해당 사이트를 통해 React 뿐만 아니라 다른 좋은 강의들이 있어서 도움을 많이 받고 있습니다.

아래 사이트를 통해 무료 교육과 필요시 유료 교육을 들으실 수 있고, 강사님이 개발자들에 필요한 유용한 정보들을 Youtube에도 올려주시니 구독하시고 자주 들으시면 좋을 것 같네요.

 

https://academy.nomadcoders.co/courses/

 

Academy

% Complete

academy.nomadcoders.co

https://www.youtube.com/channel/UCUpJs89fSBXNolQGOYKn0YQ

 

노마드 코더 Nomad Coders

한국인 린과 콜롬비아인 니꼴라스의 프로젝트 "노마드 코더" 입니다. 2015년 떠나, 현재까지 원하는 곳에서 일하며, 살고 있습니다. + + Nomad Academy: https://academy.nomadcoders.co Facebook: facebook.com/nomadcode...

www.youtube.com

감사합니다.

 

 

반응형

'FrontEnd > React' 카테고리의 다른 글

[React]4.영화 App 만들기  (0) 2021.03.15
[React]3.State & Component Life Cycle  (0) 2021.03.15
[React]2.Component, JSX, Props  (0) 2021.03.15
[React]1.React 소개와 설치  (0) 2021.03.15
반응형

안녕하세요. PSYda입니다.

이번 포스팅에서는 Pandas의 DataFrame에 대해 알아보겠습니다.

소개할 내용은 아래와 같습니다.

  • DataFrame 생성
  • DataFrame에 Data추가/삭제/조회

2. DataFrame

DataFrame 이란?

  • 2차원 데이터
  • 인덱스가 같은 하나 이상의 Series가 모여진 데이터
  • DBMS 의 관계형 Table 과 매우 유사

먼저 DataFrame을 사용하기 위해 Pandas 라이브러리를 import 합니다.

# pandas library import
import pandas as pd
from pandas import Series, DataFrame

2.1 DataFrame 데이터 생성

DataFrame을 생성하기 위해 셀에 DataFrame() 이라고 입력하고 괄호 안에서 Shift+tab 을 눌러보면 아래와 같은 정보가 보입니다.

DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

값을 입력해줄 수 있고, Default 가 None이기 때문에 값이 없으면 아무 동작도 하지 않습니다. 속성값들을 하나씩 알아보겠습니다.

  • data : 저장되는 데이터
  • index : index에 대한 정보(미입력시 0부터 순차적으로 부여)
  • columns : 열에 대한 이름값(미입력시 0부터 순차적으로 부여)
  • dtype : 데이터에 대한 타입 명시(미입력시 자체적으로 판단)

예제를 확인하겠습니다.

Data1 = DataFrame([[180,75],[160,65],[170,75], [175,80]],
                  index = ["사람1","사람2","사람3","사람4"],
                  columns = ["키","몸무게"])
Data1

몸무게
사람1 180 75
사람2 160 65
사람3 170 75
사람4 175 80

index와 columns의 경우 선언후에도 별도로 입력할 수도 있습니다.

Data1 = DataFrame([[180,75],[160,65],[170,75], [175,80]])
Data1

0 1
0 180 75
1 160 65
2 170 75
3 175 80
# 인덱스 저장
Data1.index = ["Man1","Man2","Man3","Man4"]
Data1

0 1
Man1 180 75
Man2 160 65
Man3 170 75
Man4 175 80
# 컬럼명 저장
Data1.columns = ["Height","Weight"]
Data1

Height Weight
Man1 180 75
Man2 160 65
Man3 170 75
Man4 175 80

2.2 데이터 추가, 삭제

2.2.1 Column 추가

2.2.1.1 값으로 추가

Data1["나이"] = [30,40,32,33]
Data1

Height Weight 나이
Man1 180 75 30
Man2 160 65 40
Man3 170 75 32
Man4 175 80 33

2.2.1.2 Series 또는 DataFrame에서 추가

# bmi = 몸무게(kg) / 키(m)*키(m)
Data1["BMI"] = Data1["Weight"] / ((Data1["Height"] / 100) * (Data1["Height"] / 100))
Data1

Height Weight 나이 BMI
Man1 180 75 30 23.148148
Man2 160 65 40 25.390625
Man3 170 75 32 25.951557
Man4 175 80 33 26.122449

2.2.2 행 추가

append 함수를 이용해서 행기준으로 데이터를 추가 할 수 있습니다.

2.2.2.1 Series와 List를 이용한 행추가

listOfSeries = [pd.Series([187, 85, 34, 0], index = Data1.columns),
               pd.Series([183, 80, 32, 0], index = Data1.columns)]
Data1 = Data1.append(listOfSeries)
Data1

Height Weight 나이 BMI
Man1 180 75 30 23.148148
Man2 160 65 40 25.390625
Man3 170 75 32 25.951557
Man4 175 80 33 26.122449
0 187 85 34 0.000000
1 183 80 32 0.000000

2.2.2.2 DataFrame을 행기준으로 추가

df = DataFrame([[180,75,30,33],[160,65,40,22]],
               index = ["사람5","사람6"],
               columns = ["Height","Weight","나이","BMI"])
df

Height Weight 나이 BMI
사람5 180 75 30 33
사람6 160 65 40 22
Data1.append(df)

Height Weight 나이 BMI
Man1 180 75 30 23.148148
Man2 160 65 40 25.390625
Man3 170 75 32 25.951557
Man4 175 80 33 26.122449
0 187 85 34 0.000000
1 183 80 32 0.000000
사람5 180 75 30 33.000000
사람6 160 65 40 22.000000

2.2.3 데이터 삭제

drop 함수를 쓰면 행과 열을 삭제 할 수 있습니다.

axis option

  • 0 : 행 기준 삭제
  • 1 : 열 기준 삭제

2.2.3.1 열 삭제

Data1 = Data1.drop("BMI", axis = 1)
Data1

Height Weight 나이
Man1 180 75 30
Man2 160 65 40
Man3 170 75 32
Man4 175 80 33
0 187 85 34
1 183 80 32

2.2.3.2 행 삭제

Data1 = Data1.drop("Man1", axis = 0)
Data1

Height Weight 나이
Man2 160 65 40
Man3 170 75 32
Man4 175 80 33
0 187 85 34
1 183 80 32

2.3 DataFrame 조회

# 예제를 위한 데이터 생성
Data2 = DataFrame([[180,75,30],[160,65,40],[170,75,32], [175,80,33]],
                  index = ["사람1","사람2","사람3","사람4"],
                  columns = ["키","몸무게","나이"])
Data2

몸무게 나이
사람1 180 75 30
사람2 160 65 40
사람3 170 75 32
사람4 175 80 33

2.3.1 Column 조회

DataFrame명["속성명"] 또는 DataFrame명.속성명을 통해 특정 속성명만 조회 할 수 있다.

하나의 속성명을 조회 하면 SeriesType, 여러 속성명을 조회 하면 DataFrame으로 출력된다.

# 키 Column 만 조회
Data2["키"]
사람1    180
사람2    160
사람3    170
사람4    175
Name: 키, dtype: int64
# Type 은 Series
type(Data2.몸무게)
pandas.core.series.Series
# 두 개 이상 컬럼 조회
Data2[["키", "몸무게"]]

몸무게
사람1 180 75
사람2 160 65
사람3 170 75
사람4 175 80

2.3.2 Index 조회

  • DataFrame명.loc["index명"] 을 통해 특정 index만 조회 가능하다.
  • DataFrame명.iloc[index번호] 를 통해 특정 index만 조회 가능하다.

마찬가지로 하나의 index만 조회 할 경우 Series Type, 여러 index의 경우 DataFrame Type으로 출력한다.

Data2.loc["사람1"]
키      180
몸무게     75
나이      30
Name: 사람1, dtype: int64
# 1번 인덱스 --> 사람2의 정보만 출력
Data2.iloc[1]
키      160
몸무게     65
나이      40
Name: 사람2, dtype: int64
# 두 개 index를 index명으로 조회
Data2.loc[["사람1","사람2"]]

몸무게 나이
사람1 180 75 30
사람2 160 65 40
# 여러 개의 index를 index번호로 조회
Data2.iloc[1:3]

몸무게 나이
사람2 160 65 40
사람3 170 75 32

2.3.3 Index 와 column 동시 조회

하나의 index 명과 컬럼명에 해당하는 하나의 값 찾기

  • DataFrame명.at["index명","컬럼명"]
  • DataFrame명.loc["index명","컬럼명"]
  • DataFrame명.loc["index명"]["컬럼명"]
여러 index명과 컬럼명에 해당하는 여러 값 찾기
  • DataFrame명.loc[["index명1","index명2"],["컬럼명1","컬럼명2"]]
  • DataFrame명.loc[["index명1","index명2"]][["컬럼명1","컬럼명2"]]
#사람1의 나이 찾기
Data2.loc["사람1","나이"]
30
#사람2의 몸무게 찾기
Data2.loc["사람2"]["몸무게"]
65
#사람3의 키 찾기
Data2.at["사람3","키"]
170
# 사람1, 사람2 의 키 조회
Data2.loc[["사람1","사람2"]]["키"]
사람1    180
사람2    160
Name: 키, dtype: int64
# 사람1,사람2 의 키와 몸무게 조회
Data2.loc[["사람1","사람2"],["키","몸무게"]]

몸무게
사람1 180 75
사람2 160 65

하나의 index 번호와 컬럼번호에 해당하는 하나의 값 찾기

  • DataFrame명.iat[index번호,컬럼번호]
  • DataFrame명.iloc[index번호,컬럼번호]
  • DataFrame명.iloc[index번호][컬럼번호]
여러 index 번호와 컬럼번호에 해당하는 여러 값 찾기
  • DataFrame명.iloc[index번호1:index번호2,컬럼번호1:컬럼명번호2]
# 사람1의 나이 찾기
Data2.iloc[0,2]
30
#사람2의 몸무게 찾기
Data2.iloc[1][1]
65
#사람3의 키 찾기
Data2.iat[2,0]
170
# 사람1, 사람2 의 키 조회
Data2.iloc[0:2,0]
사람1    180
사람2    160
Name: 키, dtype: int64
# 사람1,사람2 의 키와 몸무게 조회
Data2.iloc[0:2,0:2]

몸무게
사람1 180 75
사람2 160 65

2.3.4 조건 조회

# 키가 170 이상인 사람만 조회
Data2[Data2["키"] >= 170]

몸무게 나이
사람1 180 75 30
사람3 170 75 32
사람4 175 80 33

2.3.5 상위/하위 데이터 조회

  • head(개수) : 위에서부터 개수만큼의 데이터만 출력
  • tail(개수) : 밑에서부터 개수만큼의 데이터만 출력
개수를 쓰지 않을 경우 5개만 출력
Data2.head(2)

몸무게 나이
사람1 180 75 30
사람2 160 65 40
Data2.tail(2)

몸무게 나이
사람3 170 75 32
사람4 175 80 33

위의 Jupyter notebook 내용은 여기 Github에서도 확인 할 수 있습니다.

감사합니다.

반응형
반응형

안녕하세요. PSYda 입니다.
Pandas는 2개의 자료구조(Series , DataFrame)를 가지고 있습니다.
Series는 1차원 데이터 구조, DataFrame은 2차원 데이터 구조를 나타냅니다.
이번 포스팅에서는 Series에 대해 아래와 같은 내용을 알아볼 예정입니다.

  • Series 데이터의 생성
  • Series 데이터의 조회
  • Series 산술 연산
  • Series 통계

1. Series

Series란?

  • 1차원 데이터
  • Index 와 Value 로 구성(Python의 사전데이터와 유사)

먼저 Series 나 DataFrame을 사용하기 위해 Pandas 라이브러리를 import 해야합니다.(설치는 이전 블로그를 참고해주세요.)

# pandas library import
import pandas as pd
from pandas import Series, DataFrame

1.1 Series 데이터 생성

  • Python 자료형으로 생성가능(리스트, 튜플, 사전)
  • numpy array 자료형으로 생성가능

1.1.1 리스트로 Series 생성

data = pd.Series([1,2,3,4])
data
0    1
1    2
2    3
3    4
dtype: int64

1.1.2 튜플로 Series 생성

data = pd.Series((1,2,3,4))
data
0    1
1    2
2    3
3    4
dtype: int64

1.1.3 numpy.array로 Series 생성

import numpy as np
data = pd.Series(np.array([1,2,3,4]))
data
0    1
1    2
2    3
3    4
dtype: int32

위의 3가지 방법으로 생성한 Series 를 보면, Value 값(1,2,3,4)과 index 값(0,1,2,3)으로 저장되는 것을 확인 할 수 있습니다.
index를 key라고 한다면, key와 value로 이루어진 dict(사전) 타입과 비슷하다는 점을 알 수 있습니다.
물론 아래와 같이 사전 타입으로도 생성이 가능합니다.

1.1.4 사전타입으로 Series 생성

data = pd.Series({1:1, 2:2, 3:3 ,4:4})
data
1    1
2    2
3    3
4    4
dtype: int64

1,2,3,4 라는 key값이 index로 저장되고 1,2,3,4 라는 데이터가 value로 저장되는 것을 확인 할 수 있습니다. method를 통해 index와 value 값을 따로 가져 올 수도 있습니다.

# index 값 가져 오기
data.index
Int64Index([1, 2, 3, 4], dtype='int64')
# value 값 가져 오기
data.values
array([1, 2, 3, 4], dtype=int64)

위의 결과들을 보면 "dtype = int64" 라는 구문을 볼 수 있습니다. int형 외에 다른 자료형들도 Series에 저장 될 수 있습니다.

1.1.5 여러 자료형으로 Series 생성

data.dtypes
dtype('int64')
# 여러 자료형으로 Series 생성
data2 = Series(["pandas", "PSY", 34])
data2
0    pandas
1       PSY
2        34
dtype: object
data2.dtypes
dtype('O')

문자열을 포함한 숫자가 아닌 형태의 자료형이 Series에 저장되면 Object type으로 저장 되는 것을 확인 할 수 있습니다.

1.2 Series의 index

  • 사전형으로 Series를 생성하면사전형의 key값이 index로 저장
  • 사전형이 아닌 데이터로 Series 생성할 때 index를 명시적으로 입력 가능
  • 입력값이 없다면 0부터 순서대로 번호를 부여

1.2.1 Series 생성시에 Index명 입력

data3 = Series(["토트넘", "손흥민" , 30], index = ["팀명","선수명","Goal수"])
data3
팀명       토트넘
선수명      손흥민
Goal수     30
dtype: object
data3.index
Index(['팀명', '선수명', 'Goal수'], dtype='object')

1.2.2 이미 생성되어 있는 Series의 index명 변경

data3.index = ["도시명", "사는사람" , "나이"]
data3.index
Index(['도시명', '사는사람', '나이'], dtype='object')

1.3 Series의 조회(색인)

Series의 데이터를 조회하는 기법에 대해 설명하기 위해 Series 하나를 만들어 보겠습니다.

data4 = Series([1,2,3,4,5,6,7,8,9],index = ["서울","대전","대구","부산","광주","전주","충주","마산","성남"])
data4
서울    1
대전    2
대구    3
부산    4
광주    5
전주    6
충주    7
마산    8
성남    9
dtype: int64

1.3.1 index 기준으로 조회

#서울 데이터 조회
data4.at["서울"]
1
#서울, 부산 데이터 조회
data4[["부산","서울"]]
부산    4
서울    1
dtype: int64
# 위에서 부터 2개 Data
data4[0:2]
서울    1
대전    2
dtype: int64
# 끝에서 3개 Data
data4[-3:]
충주    7
마산    8
성남    9
dtype: int64

1.3.2 index 조건 색인

# 서울, 대전 ,대구 데이터 조회
# isin 함수에 인자에 해당하는 index 만 True값을 가지고, True값만 출력
data4[data4.index.isin(["서울","대전", "대구"])]
서울    1
대전    2
대구    3
dtype: int64

1.3.3 조건으로 조회

# 3이상인 데이터만 조회하는 방법
# 1. 각 데이터가 3보다 큰지 확인
data4 > 3
서울    False
대전    False
대구    False
부산     True
광주     True
전주     True
충주     True
마산     True
성남     True
dtype: bool
# 2. True 인 데이터만 조회
data4[ data4 > 3 ]
부산    4
광주    5
전주    6
충주    7
마산    8
성남    9
dtype: int64

1.4 Series의 산술 연산 및 통계

1.4.1 상수와의 연산

# data4의 모든 데이터에 10 더하기
data4 + 10
서울    11
대전    12
대구    13
부산    14
광주    15
전주    16
충주    17
마산    18
성남    19
dtype: int64
# add 함수를 이용해 더하기
data4.add(10)
서울    11
대전    12
대구    13
부산    14
광주    15
전주    16
충주    17
마산    18
성남    19
dtype: int64

1.4.2 Series 끼리의 연산

  • 두 Series의 같은 index 끼리 연산함
  • 같은 index가 없을 경우 NaN으로 저장됨

연산을 위해 새로운 Series 생성

data5 = Series([10,20,30],index = ["서울","대전","대구"])
data5
서울    10
대전    20
대구    30
dtype: int64
data6 = data4 + data5
data6
광주     NaN
대구    33.0
대전    22.0
마산     NaN
부산     NaN
서울    11.0
성남     NaN
전주     NaN
충주     NaN
dtype: float64

위의 과정을 보면 Series끼리의 연산이 어떻게 동작되는지 알 수 있습니다.
첫 번째로 두 Series의 Index명이 동일하면 연산을 수행합니다. 그 예시로 첫 번째 Series의 "서울", "대전", "대구" 의 데이터와 두 번째 Series의 "서울", "대전", "대구" 의 데이터가 합해지는 것을 볼 수 있습니다.
두 번째 과정을 보면 두 Series에서 동일한 Index가 없는 경우 NaN이 됩니다.
NaN은 데이터가 없다는 뜻으로 타언어의 Null과 동일한 개념입니다.

1.5 NaN 데이터 처리

  • fill_value 옵션 : NaN 데이터를 입력값으로 적용후에 함수 적용
  • fillna 함수 : NaN값을 입력값으로 변경

add와 같은 산술연산함수를 적용할 때 fill_value 옵션을 적용하면 NaN이 발생할 경우 특정 값으로 대입할 수 있습니다.

data4.add(data5, fill_value = 0)
광주     5.0
대구    33.0
대전    22.0
마산     8.0
부산     4.0
서울    11.0
성남     9.0
전주     6.0
충주     7.0
dtype: float64

Series에 NaN값이 있을 경우 fillna를 이용해 NaN을 입력값으로 변경할 수 있습니다.

# fillna를 통해 NaN값을 특정값으로 할당
data6.fillna(0)
광주     0.0
대구    33.0
대전    22.0
마산     0.0
부산     0.0
서울    11.0
성남     0.0
전주     0.0
충주     0.0
dtype: float64

1.6 통계

  • describe 함수 : 주요 통계 정보 보기
  • mean 함수 : 평균 구하기
  • std 함수 : 표준편차 구하기
# 데이터 통계 정보 보기
data4.describe()
count    9.000000
mean     5.000000
std      2.738613
min      1.000000
25%      3.000000
50%      5.000000
75%      7.000000
max      9.000000
dtype: float64
# 평균 구하기
data4.mean()
5.0
# 표준 편차 구하기
data4.std()
2.7386127875258306

위의 Jupyter notebook 내용은 여기 Github에서도 확인 할 수 있습니다.
감사합니다.

반응형
반응형

안녕하세요. PSYda입니다.
오늘은 Pandas가 무엇인지 알아보겠습니다.

1. Pandas란?

Pandas의 공식 Github에서 설명하는 Pandas는 아래와 같습니다.

 

"관계형" 또는 "레이블이 된" 데이터로 쉽고 직관적으로 작업할 수 있도록 설계되었고 빠르고, 유연한 데이터 구조를 제공하는 Python 패키지

 

관계형, 레이블이 된 데이터라는 말은 엑셀의 데이터나, DBMS의 관계형 테이블 형태와 같은 표형태의 데이터로 이해 할 수 있습니다. 아무튼 데이터를 쉽게 다룰 수 있고, 분석을 용이하게 해주는 파이썬 라이브러리라고 이해 할 수 있습니다.

2. Pandas로 할 수 있는 것은?

구체적으로 Pandas로 할 수 있는 것들은 아래와 같습니다.

  • Python 자료구조와의 호환(List ,Tuple, Dict, NumpyArray 등)
  • 큰 데이터의 빠른 Indexing, Slicing, Sorting 하는 기능
  • 두 데이터 간의 Join(행,열 방향) 기능
  • 데이터의 피봇팅 및 그룹핑
  • 데이터의 통계 및 시각화 기능
  • 외부 데이터를 입력 받아 Pandas 자료구조로 저장 및 출력(CSV, 구분자가 있는 txt, 엑셀데이터, SQL database, XML 등)

3. Pandas 사용하기

Pandas는 파이썬 라이브러리이기 때문에 별도의 설치가 필요한데, Anaconda라는 패키지를 사용하면, Pandas가 기본으로 설치되어 있기 때문에 Anaconda를 이용하는 것을 권장합니다.

Anaconda는 수학, 과학, 데이터 분석 분야에서 사용하는 Python 패키지를 한 번에 설치 할 수 있게 해줍니다. 또한 Jupyter notebook과 같은 IDE 개발 도구도 함께 설치 할 수 있습니다.

Anaconda 공식 홈페이지에서 원클릭으로 쉽게 설치 할 수 있습니다.

4. 포스팅 목자

  1. Pandas의 자료구조-Series
  2. Pandas의 자료구조-DataFrame
  3. 여러 DataFrame 연결하기
  4. Pandas의 파일 입출력
  5. Pandas DataFrame 산술 연산
  6. Pandas DataFrame 통계
  7. Pandas DataFrmae의 sort,rank 함수
  8. Series와 DataFrame에 함수 적용하기
  9. DataFrame의 집계(그룹핑) 함수

다음의 포스팅부터 Jupyter notebook을 사용하여 직접 Pandas를 실습할 예정입니다.
Pandas에 대한 추가적인 정보가 필요할 경우 공식 문서를 참고해주세요.

반응형
반응형

https://docs.microsoft.com/ko-kr/visualstudio/python/working-with-c-cpp-python-in-visual-studio?view=vs-2019

 

Python용 C++ 확장명 작성 - Visual Studio

혼합 모드 디버깅을 비롯하여 Visual Studio, CPython 및 PyBind11을 사용하여 Python에 대한 C++ 확장을 만드는 연습 과정입니다.

docs.microsoft.com

위의 글 중 CPython 확장을 활용하여 Wrapping 구현 및 성능 확인을 하였다.

 

먼저 Wrapping할 C++ 코드를 작성한다.

 

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
31
32
33
34
35
36
37
38
39
40
//modul.cpp
#include <Windows.h>
#include <cmath>
#include <Python.h>
const double e = 2.7182818284590452353602874713527;
 
double sinh_impl(double x) {
    return (1 - pow(e, (-2 * x))) / (2 * pow(e, -x));
}
 
double cosh_impl(double x) {
    return (1 + pow(e, (-2 * x))) / (2 * pow(e, -x));
}
 
PyObject* tanh_impl(PyObject *, PyObject* o) {
    double x = PyFloat_AsDouble(o);
    double tanh_x = sinh_impl(x) / cosh_impl(x);
    return PyFloat_FromDouble(tanh_x);
}
 
static PyMethodDef superfastcode_methods[] = {
    // The first property is the name exposed to Python, fast_tanh, the second is the C++
    // function name that contains the implementation.
    { "fast_tanh", (PyCFunction)tanh_impl, METH_O, nullptr },
 
    // Terminate the array with an object containing nulls.
    { nullptr, nullptr, 0, nullptr }
};
 
static PyModuleDef superfastcode_module = {
    PyModuleDef_HEAD_INIT,
    "superfastcode",                        // Module name to use with Python import statements
    "Provides some functions, but faster",  // Module description
    0,
    superfastcode_methods                   // Structure that defines the methods of the module
};
 
PyMODINIT_FUNC PyInit_superfastcode() {
    return PyModule_Create(&superfastcode_module);
}
cs

 

C++ code를 Build 하기 위해 아래와 같은 Python code를 작성한다.

1
2
3
4
5
6
7
8
9
#setup.py
from distutils.core import setup, Extension, DEBUG
 
sfc_module = Extension('superfastcode', sources = ['module.cpp'])
 
setup(name = 'superfastcode', version = '1.0',
    description = 'Python Package with superfastcode C++ extension',
    ext_modules = [sfc_module]
    )
cs

 

c++ 파일과 setup.h을 같은 폴더 경로에 두고, 콘솔창을 열어 해당 폴더로 이동 후 아래와 같이 명령어를 실행한다.

pip intall .

이미지와 같이 빌드가 되는 것을 확인 할 수 있다.

 

새로운 Python 파일을 만들어, 성능을 테스트 해보았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
from superfastcode import fast_tanh
import numpy as np
import time
 
# C++ 로 Wrapping한 tanh 함수를 이용해 속도 측정
start = time.time()
result = list([fast_tanh(i) for i in range(10000000)])
print(time.time()-start
 
# Python numpy에서 제공하는 tanh 함수를 이용해 속도 측정
start = time.time()
result = list([np.tanh(i) for i in range(10000000)])
print(time.time()-start)
cs

 

실험 결과 C++ Wrapping 한 tanh 함수는 2.41 초가 걸린 반면, numpy의 tanh 함수는 7.31초가 걸리는 것을 확인하였다.

반응형
반응형

혼자 스터디 위한 온라인 강좌 리스트입니다.

1. 부스트코스(https://www.edwith.org/boostcourse-web)

반응형
반응형

반응형

+ Recent posts

반응형