유용링크들

101가지 문제풀기 연습



random 관련


0이상 20미만의 int 10개 배열 만들기

> a = np.random.randint(20, size=10)

array([17, 12,  4, 18, 11, 15,  5, 19, 19, 18])



5행3열의 array를 만들고 그 값들을 5~10 사이의 랜덤한 숫자로 채우고 싶을때

np.random.uniform(5, 10, size=(5,3))

#> [[ 8.50061025  9.10531502  6.85867783]

#>  [ 9.76262069  9.87717411  7.13466701]

#>  [ 7.48966403  8.33409158  6.16808631]

#>  [ 7.75010551  9.94535696  5.27373226]

#>  [ 8.0850361   5.56165518  7.31244004]]


위를 소수점 3째자리 까지만 나오도록 하고 싶으면

> np.set_printoptions(precision=3) 하면됨(글로벌 적용이라 그 이후에 출력하는데는 다 공통적으로 적용됨)


e-04와 같은 scientific notation을 제거하고 싶으면?

> np.set_printoptions(suppress=True) 하면 된다.



array관련

> np.arange(10) 하면 array([0,1,2,3,4,5,6,7,8,9]) 가 만들어 진다.



> arr = np.arange(10) 한다음


> arr[arr%2 == 1] 하면 array([1,3,5,7,9])가 리턴된다. (조건문을 인덱스 부분에 넣을 수 있다는 것. 그냥 python list로는 안되는 부분)


> arr[arr%2 == 1] = -1 하면 arrary([0,-1,2,-1,4,-1,6,-1,8,-1]) 이 만들어진다. 조건문으로 인덱스 조회가 되는것 뿐 아니라 assign과 연결시킬수도 있다.


> arr *= -1 하면 array([0,-1,-2,-3,-4,-5,-6,-7,-8,-9])가 만들어진다. (element에 대한 연산을 저런식으로 할 수 있다는것.. python list로는 다른 의미가 되어버리니 주의할 것)



np.where 사용하기

> a = np.array([1,2,3,2,3,4,3,4,5,6])

> b = np.array([7,2,10,2,7,4,9,4,9,8])


값이 같은 인덱스만 추리고 싶으면?

> np.where(a == b) 하면된다.

> array([1,3,5,7])이 리턴된다.




반응형

'Programming > Python' 카테고리의 다른 글

pudb  (0) 2018.11.15
Anaconda & Jupyter  (0) 2018.03.23
python virtualenv 가상환경  (0) 2017.11.16
python에서 doxygen 사용해보기  (0) 2017.11.14
python import  (0) 2017.11.14

참고사항: python3.3부터는 venv를 공식지원하므로 가능하면 venv사용을 먼저 고려하는게 좋음

 

virtual environment가 필요한 이유

이거 없으면, 한 PC에서 여러프로젝트 운영할려고 할때 꼬임

프로젝트마다 python2, python3사용여부가 다르거나, 필요한 라이브러리 버전이 다르거나 할 때, 

여러개의 파이썬 프로젝트가 하나의 컴퓨터에서 충동을 일으키지 않고 존재할 수 있도록 도와줌

 

virtual environment 동작 원리

여기서 환경이란 파이썬 프로그램을 실행시키는데 필요한 모든것의 복사본을 가지고 있는 단순한 폴더입니다. 

전체 파이썬 스탠다드 라이브러리 복사본, pip 설치 프로그램 복사본, 그리고 site-packages 복사본 등을 포함. 

pip install을 사용하면, virtualenv 폴더 내부의 site-packages 폴더에 이를 설치합니다. 

 

virtualenv 설치하기

# sudo pip3 install virtualenv virtualenvwrapper

pip와 virtualenv는 일반적으로 글로벌 설치가 되어야하는 유일한 패키지입니다. 

이 두개를 설치하고 나면 나머지 패키지들은 가상 환경에 설치하면 되기 때문입니다.

virtualenvwrapper는 virtualenv를 사용하기 쉽게 만들어주는 추가 툴이라고 보면 됨

 

virtualenvwrapper를 위한 추가 설정

여기가 약간 골때림 1회성작업이긴 하지만, ~/.bashrc에 다음 5줄을 추가해주고 source ~/.bashrc해줘야 mkvirtualenv 커맨드가 먹음

virtualenvwrapper를 사용하지 않아도 가상환경사용은 가능하지만, 사용하기 직관적이지 않아 비추

 

export WORKON_HOME=~/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
export VIRTUALENVWRAPPER_ENV_BIN_DIR=bin

 

위 과정에서 no module named virtualenvwrapper 라는 오류가 나면 위의 sudo pip3 를 sudo pip로 해서 다시해본다.

혹은 sudo ln -sf /usr/bin/python3 /usr/bin/python 으로 기본 python 버전을 2에서 3으로 바꿔준다.

python3를 사용하는 virtual environment 만들기

프로젝트 루트 폴더(예를 들면 ~/workspace)로 이동후 아래처럼 하면 python3를 기본으로 하는 env라는 이름의 virtual environment가 만들어 진다.

# mkvirtualenv -p python3 env_name

이렇게 하면 ~/.virtualenv/env_name 여기에 환경이 만들어진다.

지울때는 rmvirtualenv env_name 하면 된다.

 

 

virtual environment에 진입하기

# workon env_name (coin) #

빠져 나올때는 deactivate 하면 된다.

 

requirements.txt관련해서는 여기참조

 

numpy에러나면 다음 명령어 수행(라즈베리파이의 경우)

sudo apt-get install libatlas-base-dev

 

반응형

'Programming > Python' 카테고리의 다른 글

Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python에서 doxygen 사용해보기  (0) 2017.11.14
python import  (0) 2017.11.14
python 시간관련 함수  (0) 2017.10.31

머릿말

doxygen을 사용하면, 프로젝트의 전반적인 내용을 파악할 수 있는 document가 자동 생성된다.

doxygen을 오랜만에 사용해보고, 게다가 c/c++ 프로젝트가 아닌 python project에 사용해보는건 처음이라 그 과정을 적어본다.

전체 과정은 https://www.stack.nl/~dimitri/doxygen/manual/starting.html 이곳을 참조했다


독시젠 설치

먼저 doxygen을 설치하자, 


CentOS면 sudo yum install doxygen

Ubuntu면 sudo apt-get install doxygen

macOS면 brew install doxygen

이런식으로 간단하게 설치가 가능하다.


독시젠 configuration

독세젠을 돌리려면 먼저 configuration file을 만들어야 한다.


doxygen -g 라고 하면 Doxyfile 이라는 configuration 파일이 만들어진다. (에디터로 열어서 수정 가능하다)


주의할점: Doxyfile을 열어서 EXTRACT_ALL = NO를 YES로 변경해야 결과가 제대로 나온다.

(If the EXTRACT_ALL option is set to NO in the configuration file (the default), then doxygen will only generate documentation for documentedentities.)


독시젠 돌리기

간단하게

doxygen 이라고만 하면 자동으로 결과가 생성된다.


독시젠 생성 결과물 보기

html/index.html을 열어보면 결과를 확인할 수 있다.


여기까지만 해도 좋지만, graphviz를 설치하여 call graph를 추가하고, 여러가지 추가 옵션을 줘보자.


결과에 call graph 추가




위와 같은 call graph를 결과물에 포함시키기 위해서는, 먼저 graphviz라는 툴을 설치해야한다.

macOS의 경우 brew install graphviz로 설치 가능하다.


그다음 Doxyfile을 다시 열어서 아래 내용을 수정해준다.


-그래프 설정
CALL_GRAPH             = YES
CALLER_GRAPH           = YES


- Graphviz 바이너리 위치 설정
DOT_PATH               = /usr/bin/graphml2gv
HAVE_DOT               = YES

(위 graphml2gv 경로설정은 which graphml2gv 명령어를 통해서 확인한 다음에 넣으면 된다.)

- 클래스 상속 구조 포함
CLASS_DIAGRAMS          = YES

- 그래프를 text가 아니라 그래픽 버전으로 보여줌
GRAPHICAL_HIERARCHY     = YES 


- 대상 폴더의 하위 폴더도 대상으로 지정
RECURSIVE              = YES

- 생성되는 doc 파일이 많아지므로 하위폴더 생성
CREATE_SUBDIRS         = YES

- 문서에 구현 소스도 포함
INLINE_SOURCES         = YES

- 문서에 소스파일 추가 (Files에서 조회 가능)
SOURCE_BROWSER         = YES


(위 내용은 http://heavensbus.blogspot.kr/2014/07/doxygen-call-caller.html 이곳을 참조했습니다.)


반응형

'Programming > Python' 카테고리의 다른 글

Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16
python import  (0) 2017.11.14
python 시간관련 함수  (0) 2017.10.31


현재 위치가 ./ 이고 내가 정의한 클래스의 위치가 ./home/test.py에 있다고 해보자.

그리고 그 클래스의 이름이 다음과 같이 Foo로 정의되어 있다고 하자.

1
2
3
class Foo(object):
 
    pass

이때 ./위치에서 이 클래스를 가져다 쓰려면 다음과 같이 여러가지 방법이 있다.

(python2.x의 경우 주의할 점은 home 폴더 안에 __init__.py 파일이 dummy로 라도 생성되어 있어야 한다.)

방법1

1
2
3
import home.test
 
f = home.test.Foo()

 

방법2

1
2
3
from home.test import Foo
 
f = Foo()

 

방법3

1
2
3
from home import test
 
f = test.Foo()

 

방법4

1
2
3
import home.test as t
 
f = t.Foo()

 

 

일반적으로는 방법2가 가장 편리하다. 단 Foo말고 다른 것도 많을 경우 하나씩 지정해주기가 힘들다. 이때는 import Foo 대신 import *를 해주는 방법이 있다.


방법4도 편할 수 있다. 단 import를 import home.test.Foo as F 처럼 class단위까지 바로 할 수는 없다.



반응형

'Programming > Python' 카테고리의 다른 글

Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16
python에서 doxygen 사용해보기  (0) 2017.11.14
python 시간관련 함수  (0) 2017.10.31

현재 시간 얻어오기

from datetime import datetime
now = datetime.now()
print(now)  # 2017-10-31 13:20:54.339081
type(now)  # <type 'datetime.datetime'>


시간의 년도/월/일 등 각 항목을 얻어올때는 timetuple() 사용

from datetime import datetime
now = datetime.now()
now_tuple = now.timetuple()
now_tuple.tm_year  # 2017


타임존 변환

뉴욕시간을 서울시간으로변경(서머타임, day-light saving 자동으로 고려됨)

from datetime import datetime
from pytz import timezone

 # 뉴욕시간으로 오전 9시 30분 입력 
ny_dt = timezone('America/New_York').localize(datetime(2017, 10, 23, 9, 30, 0)) 
ny_dt  # 2017-10-23 09:30:00-04:00 

# 서울시각으로 변경
kr_dt = ny_dt.astimezone(timezone('Asia/Seoul'))
kr_dt  # 2017-10-23 22:30:00+09:00 


스트링을 datetime으로 형변환 하기

format은 여기 참조

from datetime import datetime
s = '2020-08-01T03:55:15+09:00'
dt = datetime.strptime(s, '%Y-%m-%dT%H:%M:%S%z')
dt  # datetime.datetime(2020, 8, 1, 3, 55, 15, tzinfo=datetime.timezone(datetime.timedelta(seconds=32400)))

시간연산하기

현재시간(now)과의 차이를 구하기(KST timezone 고려)

from datetime import datetime, timezone, timedelta
KST = timezone(timedelta(hours=9))
n = datetime.now(KST)
(n-c).seconds  # days, hours등도 가능



반응형

'Programming > Python' 카테고리의 다른 글

Anaconda & Jupyter  (0) 2018.03.23
python numpy  (0) 2018.02.28
python virtualenv 가상환경  (0) 2017.11.16
python에서 doxygen 사용해보기  (0) 2017.11.14
python import  (0) 2017.11.14

+ Recent posts