가장 기본적인 matplotlib 예제입니다.

# 필요한 라이브러리 import
import numpy as np
import matplotlib.pyplot as plt

# x = in_array, -np.pi ~ np.pi 30단계
# y = out_array, sine
in_array = np.linspace(-np.pi, np.pi, 30)
out_array = np.sin(in_array)

# plot reset
plt.clf()

# x, y축 range 지정
plt.ylim([-1.2, 1.2])
plt.xlim([0.0, 30.0])

# plot에 좌표(15, -0.5)에 text 추가
plt.text(15, -0.5, "Insert text")

# plot에 가로선 그리기 (red, 모양, 굵기)
plt.axhline(out_array.max(), color='r', linestyle ='--', linewidth=1)
# plot에 세로선 그리기 (blue, 모양, 굵기)
plt.axvline(np.argmax(out_array), color='b', linestyle='--', linewidth=1)

# plot 그리기
plt.plot(out_array)

# plot 보이기
plt.show()

실제 그린 그림입니다.

- End -

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python] Unicode error  (0) 2021.11.23
[Python] 디버깅  (0) 2020.05.03
[Python] 폴더 생성, tar 예제  (0) 2020.05.03
[Python] Animation 예제  (0) 2020.05.03

Ubuntu 14.04를 설치해서 사용 중입니다.
Ubuntu를 설치할 때 가장 먼저 설치하는 application은 Google Chrome입니다.
Windows에서도 Chrome을 사용하고, Firefox가 낯설다 보니 Chrome을 설치하게 됩니다.
Ubuntu에 Chrome을 설치하는 방법은 여러 가지가 있겠지만, Firefox 브라우저로 Chrome 설치 파일을 다운 받고, 아래 명령어로 이용합니다.

$ sudo dpkg -i google-chrome-stable_current_amd64.deb 

그런데, 가끔 Chrome가 실행되지 않을 때가 있습니다.
리눅스가 충분히 친숙하지 않고, Ubuntu 설치에는 시간이 얼마 걸리지 않아서, 이럴때는 다시 Ubuntu를 설치하고 했습니다.
이런 상황이 자꾸 반복되다보니 해결책을 찾아보았습니다.


1. Ubuntu에서 Chrome이 실행되지 않는 경우에 대한 Posting이 있긴 하지만, 여전히 문제가 발생합니다.

 

2. 참고 페이지를 따라서, gpu를 disable하고 실행해 보지만, 여전히 문제가 발생합니다.

 

3. Chrome에서 debug message  출력을 확인해 보고 싶어서  찾아보았습니다.
Google 지원 페이지에서 debug message option 을 확인할 수 있었습니다.

 --enable-logging=stderr --v=1

여러 줄의 메시지가 출력되는데, 아래 메시지가 출력되면서 멈춰 있습니다.

chrome Activated seccomp-bpf sandbox for process type: gpu-process.

무슨 의미인지 확인하기 어렵고, 화면에 출력되는 로그만으로는 문제를 확인하기 어려웠습니다.

설명에 있는 chrome_debug.log 파일을 찾아보기로 합니다.

$ find . -name "*.log"

chrome_debug.log는 보이지 않습니다.

 

그런데, .config/google-chrome 폴더가 보입니다.
이상할 때는 config를 지우는 것도 좋은 방법이니, config 폴더를 지워봅니다.

$ rm -rf .config/google-chrome

그리고,  command line에서 chrome을 실행해 봅니다.

$ google-chrome-stable

Chrome이 동작합니다.
정확한 이유는 모르겠지만, chrome이 업데이트 되면서 config 파일과 충돌이 있었거나, ubuntu를 사용하면서 설치한 패키지와 충돌이 있지 않았을까 생각해봅니다.

 
앞으로는 Ubuntu를 설치하는 일이 조금은 줄어 들것 같습니다.

-End-
 
 
 
 

반응형

파워포인트에 그림을 여러장 붙여서 정리해야 했습니다. 여러 가지 방법을 사용해 봤습니다.

선을 그려 놓고, 거기에 맞춰서 그림들을 마우스로 움직여 정렬합니다. 깔끔하지는 않지만 눈대중으로 하는 것보다는 볼만합니다.

그림이 움직일때도 눈에 보이지 않는 좌표에 따라 움직이지 않도록 설정을 변경해 보기도 합니다.

그런데, 그림을 6장씩(3x2) 10개 sheet 이상 정렬하려니, 손으로 작업하는 것은 아니다 싶었습니다.

파워포인트에도 매크로가 있지 않을까 싶어서 찾아보니, 역시나 있었습니다.

그런데, 다른 프로그램들과 달리 단축키 버튼도 없고, 자동 녹화 기능을 쉽게 찾을 수 없었습니다.

대신에 VBA 프로그래밍에 대한 내용들만 있더군요.

더 좋은 방법이 많겠지만, 간단하게 제가 사용한 방법을 정리해 보았습니다.

 

[목적]

1. 그림 파일을 읽는다.

2. 파워포인트에 붙인다.

3. 크기를 조정한다.

4. 위치를 조정한다.

5. 총 6장에 대해서 반복 작업한다.

 

[전체 코드]

Sub ChangeFigSize()

ActiveWindow.Selection.ShapeRange.LockAspectRatio = msoTrue
ActiveWindow.Selection.ShapeRange.Height = 190

picNum = InputBox("그림 위치?")

If IsNumeric(picNum) Then

    If picNum = 1 Then
        ActiveWindow.Selection.ShapeRange.Top = 90
        ActiveWindow.Selection.ShapeRange.Left = 85
    End If

    If picNum = 2 Then
        ActiveWindow.Selection.ShapeRange.Top = 300
        ActiveWindow.Selection.ShapeRange.Left = 85
    End If

    If picNum = 3 Then
        ActiveWindow.Selection.ShapeRange.Top = 90
        ActiveWindow.Selection.ShapeRange.Left = 370
    End If

    If picNum = 4 Then
        ActiveWindow.Selection.ShapeRange.Top = 300
        ActiveWindow.Selection.ShapeRange.Left = 370
    End If

    If picNum = 5 Then
        ActiveWindow.Selection.ShapeRange.Top = 90
        ActiveWindow.Selection.ShapeRange.Left = 655
    End If

    If picNum = 6 Then
        ActiveWindow.Selection.ShapeRange.Top = 300
        ActiveWindow.Selection.ShapeRange.Left = 655
    End If

End If

End Sub

 

[상세]

파워포인트에서 '매크로' 메뉴를 실행하고, 새로운 매크로를 하나 만들면, VBA 프로그램 화면이 새로 뜹니다.

위의 전체 코드를 입력하기 전에 그림들의 위치를 확인해 볼 필요가 있습니다.

우선 손으로 그림들을 배치시켜봅니다.

그리고, 아래 코드를 VBA에 넣습니다.

MsgBox 'ActiveWindow.Selection.ShapeRange.Height'
MsgBox 'ActiveWindow.Selection.ShapeRange.Top'
MsgBox 'ActiveWindow.Selection.ShapeRange.Left'

그림을 하나 선택한 후, 매크로를 실행합니다. 그러면 팝업창이 뜨면서 선택한 그림에 대한 Height, Top, Left에 대한 숫자가 표시됩니다.

이 숫자들이 선택한 그림의 크기와 좌표 정보입니다.

손으로 작업한 것이라, 그림마다 조금씩 틀릴 수 있습니다.

따라서 모든 그림에 대한 크기와 좌표를 확인한 후, 최종적으로 작업할 그림의 크기, 좌표를 정리해 둡니다.

예를 들면 그림 크기가 160.1, 159.8, 160.3등이면 160을 사용하자는 식으로 말입니다.

 

앞서 그림의 크기와 좌표를 확인하기 위한 코드를 지우고, [전체 코드]를 넣습니다.

이때 앞서 확인한 그림의 크기, 좌표등의 숫자는 정리해둔 값을 사용하세요.

 

매크로를 실행하면 팝업창이 뜨면서 몇번째 그림으로 사용할 것인지 묻습니다.

이때 1~6 중에서 원하는 숫자를 입력하면 해당 위치로 그림이 이동하게 됩니다.

 

 매크로 실행을 위한 단축키를 사용하면 좋겠지만, 인터넷에서 쉽게 찾을 수는 없었습니다.

그래서 다음과 같이 작업했습니다.

 

1. 그림 파일을 읽는다. (Ctrl+C 키보드를 입력)

2. 파워포인트에 붙인다. (Ctrl+V 키보드를 입력)

3. 매크로를 실행한다.

    3.1. 매크로 자체를 실행하기 위한 단축키 "Alt+F8" 입력
    3.2. 매크로 메뉴에서 실행 단축키 "Alt+R"키 입력
    3.3. 그림의 위치 선정을 위한 숫자 입력

 

그림이 크기가 변경된 후 원하는 위치로 자동 이동하게 되었습니다.

 

[End]

반응형

'프로그래밍 > Tips & sites' 카테고리의 다른 글

[Obsidian] Google drive와 연동하기  (0) 2022.04.03
[Sites] CRC  (0) 2020.09.12
[Tips] VIM  (0) 2019.12.17
[Tips] Notepad++  (0) 2019.12.15

Python으로 이것 저것을 시험해 보려고 virtualenv 환경을 사용하고 있습니다.

Command line으로도 사용하고, jupyter를 사용하기도 합니다.

윈도우 환경에서 그때 그때 명령어를 모두 입력하기 귀찮아서, bat 파일을 사용하고 있는데, 사용하는 batch 파일을 정리해 보았습니다.

기본적으로 윈도우용 batch 파일 관련 블로그(참고링크)를 참고했습니다.

 

전체코드는 아래와 같습니다.

set argc=0

for %%x in (%*) do Set /A argc+=1

if %argc% == 1 (
	if "%1"=="jupyter" (
		call venv\scripts\activate
		jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
	)
) else (
	call venv\scripts\activate
)

:virtualenv venv
:virtualenv venv --python=python3
:pip freeze > requirements.txt
:pip install -r requirements.txt

 

[내용]

 

batch 파일의 argument로 'jupyter'를 입력하면, virtualenv 환경 activate하고, jupyter를 실행합니다. (Jupyter 실행 환경)

Jupyter를 실행할 때 파일 크기가 큰 이미지를 불러올 때 문제가 발생하는 경우가 있었습니다. 그래서 Jupyter를 실행할 때 iopub_data_rate_limit의 값을 변경해서 실행했습니다.(참고링크)

Argument 없이 batch 파일을 실행하면 virtualenv 환경만 activate합니다. (Command line 실행 환경)

if %argc% == 1 (
	if "%1"=="jupyter" (
		call venv\scripts\activate
		jupyter notebook --NotebookApp.iopub_data_rate_limit=1.0e10
	)
) else (
	call venv\scripts\activate
)

 

그리고, 실행되지는 않지만, 주석으로 가끔 사용하는 명령어들을 적어 두었습니다.

최초 virtualenv 설치를 위한 명령입니다.

python2를 사용하는 경우와 python3를 사용하는 경우가 틀려서 따로 적어두었습니다.

:virtualenv venv
:virtualenv venv --python=python3


virtualenv 환경에서 설치한 package들을 백업하거나 재설치하기 위한 명령어들을 적어두었습니다.

:pip freeze > requirements.txt
:pip install -r requirements.txt

[End]

반응형

윈도우용 editor들을 주로 사용하고, VI는 가끔 읽기, 한두글자 고치기 정도로만 사용했습니다. 그러다 최근 plugin을 비롯해서 다양한 기능을 사용하면서 빠른 속도와 함께 매력을 느끼고 있습니다. 사용하면서 필요한 다양한 Tip들을 정리합니다.

 

  • Search history

사용한 명령어 history는 ESC mode에서 history 명령어를 이용하면 됩니다.

:history

Search history도 확인할 수 있는데 ESC mode에서 다음과 같은 명령어를 입력하면 됩니다.

:history /

혹은

:history search

 

  • Whole word search and etc.

일치하는 단어를 search할 때의 ESC 명령어는 다음과 같습니다.

/\<searching_word\>

'/'로 search를 시작하고, "\<"와 "\>"로 원하는 단어를 감싸면 일치하는 단어를 찾을 수 있습니다.

코드를 보다 보면 "variable =="는 제외하고 ""variable ="만을 찾고 싶을 때가 있었습니다. 그런데, 위의 명령어는 word만 찾기 때문에 space가 포함된 위 내용은 찾을 수 없었습니다. 다양한 방법을 찾아보다가 정규표현식을 조금만 이용해서 아래와 같은 명령어로 "=="가 아닌 "="까지만 찾을 수 있었습니다.

/searching_word =[^=]

정규표현식과 관련해서는 다양한 page들이 있지만 잘 정리된 링크를 소개합니다. (https://hamait.tistory.com/342)

 

  • 코드 indent 자동 정렬

코드의 indent를 자동으로 해주는 프로그램을 찾다가 vi에서도 아래의 ESC mode 명령어로 가능하다는 것을 알았습니다. (https://wookiist.tistory.com/1)

gg=G

Visual mode로 일부 코드를 선택한 후 "="를 입력하면 해당 block에서만 audo indent가 수행됩니다.

 

  • Block의 처음과 끝 이동하기

C언어는 block이 '{'로 시작해서 '}'로 끝나게 됩니다. VI는 똑똑하게도 그 시작과 끝을 알고 있습니다. 이때 Block의 처음과 끝을 이동하고 싶으며, 원하는 '{' 혹은 '}'에 커서를 위치시킨 후 '%'키를 누르면 '{'와 '}'사이를 왔다 갔다 할 수 있습니다.

반응형

'프로그래밍 > Tips & sites' 카테고리의 다른 글

[Obsidian] Google drive와 연동하기  (0) 2022.04.03
[Sites] CRC  (0) 2020.09.12
[Tips] 파워포인트 매크로  (0) 2019.12.28
[Tips] Notepad++  (0) 2019.12.15

문서에서 중복되는 라인을 삭제하는 방법으로 Notepad++을 사용할 수 있습니다만, 해당 링크에 있는 'uniq' 리눅스 명령어를 사용하는 방법도 인상적입니다.

$ cat yourfile | sort | uniq > file_to_save_results
반응형

'프로그래밍 > Linux_commands' 카테고리의 다른 글

[Linux] sed  (0) 2021.07.10
[Linux] find  (0) 2019.12.15
[Linux] grep  (0) 2019.04.24

예전에는 Ultra editor를 사용했습니다. 데이터 정리등을 위해서 매크로 기능을 사용했는데, 프로그래밍하기도 간단했죠. 그러다 유료인 Ultra editor 대신 무료 application을 사용하라는 요청을 받았습니다. Vi도 대안이겠지만, Windows를 주로 사용하다 보니 GUI 지원을 선호해서 Vi 보다는 Notepad++를 선택했습니다. Notepad++에 대한 tips을 정리하면 이후 유용할 것으로 보여 정리하게 되었습니다.

 

  • 중복되는 줄 삭제

reference: https://www.it-swarm.net/ko/notepad%2B%2B/%EB%A9%94%EB%AA%A8%EC%9E%A5%EC%97%90%EC%84%9C-%EC%A4%91%EB%B3%B5-%ED%96%89-%EC%A0%9C%EA%B1%B0/970641118/

 

원래는 Notepad++에서 TextFX plugin을 사용했습니다. 그런데, 윈도우를 64bit로 설치하면서 64bit용 TextFX plugin을 설치했는데도 동작하지 않았습니다. 그러다 링크의 site를 발견했죠.ㅕㅜ

Notepad++이 정규 표현식을 지원하는 줄도 몰랐는데, 단 몇자의 글자로 중복되는 줄을 삭제하는 기능을 사용할 수 있다니 정말 놀랍습니다. 간단한 정규표현식은 공부했습니다만, 여기에 사용하는 정규표현식을 해석하기도 쉽지 않으니, 정규표현식을 자유자재로 사용하는 것은 항상 부럽네요.

 

방법은 reference 링크과 같습니다.

1. Replace 메뉴를 선택 (Ctrl+h)

2. 윈쪽 아래 "Regular express"을 선택하고, "matches new line"도 체크

3. 찾는 문자열에 아래 정규식을 입력

^(.*?)$\s+?^(?=.*^\1$)

4. "찾아서 변경하기" 버튼을 누르면 중복되는 라인이 사라짐

 

반응형

'프로그래밍 > Tips & sites' 카테고리의 다른 글

[Obsidian] Google drive와 연동하기  (0) 2022.04.03
[Sites] CRC  (0) 2020.09.12
[Tips] 파워포인트 매크로  (0) 2019.12.28
[Tips] VIM  (0) 2019.12.17

이유는 알기 어렵지만, 우분투로 부팅을 했는데 이상 동작을 했습니다.

1. 아이콘 하나도 없음

2. 바탕 화면만 나오면서,

3. "Ctrl+Alt+t"을 눌러도 터미널이 실행되지 않음

다행히 "Ctrl+Alt+F1"은 동작했고, console을 띄울 수 있었습니다.

링크의 블로그를 따라서 아래 명령어를 입력했을 때 아이콘도 보이고 런처가 정상 동작을 했습니다.

다만, 한글 설정이나 런처의 기본 아이콘 설정은 변경되어 다시 설정해야 했습니다.

$ sudo service lightdm stop
$ rm ~/.config/dconf/user
$ sudo service lightdm start

 

 

 

반응형

find 관련해서 가장 자주 사용하는 명령어는 아래와 같습니다.

$ find . -name "*.c" | xargs grep -n --color=auto "KeyWord" 2> /dev/null

명령어의 의미는

1. 현재 디렉토리 이하에서 'c'  확장자를 가지는 모든 파일을 찾아라.

2. 찾은 파일들에 대해서 grep 명령어로 'KeyWord'를 포함하는 행을 찾아라.

    이때 행 번호를 표시하고, color로 나타내라

3. 에러가 발생하는 경우 console에 표시하지 마라.

입니다.

 

기타 가끔 사용하지만 유용한 find 관련 내용을 정리합니다.

 

  • cscope.files 생성

$ find . -name "*.[cCsShH] -a -type f > cscope.files

1. c(C), s(S), h(H) 확장자를 가지는 파일들을 검색합니다.

2. 그리고 (-a, and) 파일만 검색합니다. (링크 걸린 파일은 사용하지 않기 위해서)

3. cscope.files로 저장한다.

 

  • 찾은 갯수 표시

$ find . -name "File.name" | cat -n

'cat -n' 명령은 출력마다 번호를 붙이는 명령입니다. 이를 pip로 연결하면 find한 파일마다 번호를 붙이게 됩니다.

1 ./3.txt
2 ./2.txt
3 ./1.txt
반응형

'프로그래밍 > Linux_commands' 카테고리의 다른 글

[Linux] sed  (0) 2021.07.10
[Linux] uniq  (0) 2019.12.15
[Linux] grep  (0) 2019.04.24

리눅스 Python 3.5.3 환경에서 Tensorflow를 'pip install tensroflow'로 설치 후 MNIST 예제를 실행하기 위해서 아래 코드를 수행했습니다.

# MNIST 데이터를 다운로드 한다.
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

그런데 아래와 같은 에러가 확인됩니다.

ImportError: No module named 'tensorflow.examples.tutorials'

Python 2.x 버전으로 변경해 봐도 동일한 문제가 확인됩니다.

 

아래 명령어를 이용해서 설치된 tensorflow의 버전을 확인해 보면, version 2.0을 사용하고 있습니다.

>>> import tensorflow as tf
>>> tf.__version__

virtualenv 환경을 이용해서 시험했는데, venv 폴더 하위에서 mnist 관련 examples 폴더는 없었습니다. github에서 tensorflow version 2.0을 살펴보면 example 폴더가 정상적으로 존재하는 것은 확인했습니다. 다운로드만 되지는 않은 것으로 보입니다.

 

다시 시험을 위해서 모두 지우고, virtualenv 환경을 다시 한번 셋업했습니다. 이번에는 Python 3.5 버전에 맞는 tensorflow를 아래 명령어를 이용해서 직접 설치했습니다. (https://www.tensorflow.org/install/pip 참조)

pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.14.0-cp35-cp35m-linux_x86_64.whl

이후에는 MNIST 다운로드가 실행되었습니다.

 

Tensorflow version을 확인해 보면 "1.14.0"으로 확인되었으며, 아래와 같이 input_data.py 파일도 확인할 수 있었습니다.

./venv/lib/python3.5/site-packages/tensorflow/examples/tutorials/mnist/input_data.py

정확한 이유는 알기 어렵지만, python 3.5.x와 관련해서는 tensorflow version 2.0이 아닌 1.14.0으로 해야 example import 에러를 회피할 수 있는 것으로 생각됩니다. github에서 tensorflow version 2.0에 example 폴더가 정상적으로 존재하므로, github에서 직접 다운로드하는 해결책이 있을 것으로 보이지만, 진행해 보지는 않았습니다.

반응형

+ Recent posts