20170123

matplotlibのlatexで、行列とか書いて、つまずいた部分

書けないわけではない。

単純に、

import matplotlib.pyplot as plt

a= ur"$\begin{array}{ccc}a&a&a\\b&b&b\\c&c&c\end{array}$"
plt.text(0.5,0.5,a)
plt.show()

\begin{array}{ccc}a&a&a&\\b\b\b\\c\c\c\end{array}
^Unknown symbol: \begin

で止まる場合は、matplotlibが独自に使っているタイプセットに、その機能がついていないだけなので、自分のLaTeXシステムを使えば解決する。もちろん、自前でLaTeX環境は用意しなければならない。このサイトにも、自分が四苦八苦した記録が残っているかもしれない。(TeXLiveをISOでDLし、インストールする事をお勧めする。数百MBのダウンローダよりも、数GBのISOをDLした方が、トータルでかかる時間が絶対すくない。

解決策

from matplotlib import rcParams
rcParams['text.usetex'] = True

を実行するだけで、できる(ここを参考にした)。

そもそも、文字列が作れていない

SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in position : truncated \uXXXX

‘rawunicodeescape’コーデックは、\u〜〜〜〜って書いてある部分をデコード出来ない。

ur””とか、すでにいろいろつまづいて、工夫した人だと思いますが、
その工夫をした後、\uがあったら、pythonが読んでくれない事に、気を付けないといけない。

r"\usepackage{hoge}"+"\begin{..."

と、別々の文字列を、+で連結する形にしたら、エラーでなくなった。

\usepackage{amsmath}とか、入れてませんか?
入れるところ、ここじゃありませんよ。(後述するが、rcParamsから入れる。)

関連して日本語の空白も。

a= ur"$\begin{array}{ccc} a&a&a\\b&b&b\\c&c&c\end{array}$"

って、全角スペースを入れると、

UnicodeEncodeError: 'ascii' codec can't encode character u'\u3000' in position

ってエラーが返ってくる。\u3000’って、全角スペースですよ。
\uだから、だめらしい。

行列の書き方が間違っている

a&a&a&最後の&が余計

a= ur"$\begin{array}{ccc} a&a&a&\\b&b&b&\\c&c&c&\end{array}$"
! Extra alignment tab has been changed to \cr.

! LaTeX Error: Can be used only in preamble.

ここを参考にした。
\begin{document}
さっき間違えていた\usepackage{amsmath}がそれにあたる。
matplotlibでは、両方とも入れてはいけないらしい。

from matplotlib import rc
ParamsrcParams['text.usetex'] = True
rcParams['text.latex.preamble'] = r'\usepackage{amsmath}'

で入れるそうな。

$$\begin{array}{ccc}a&a&a\\b&b&b\\c&c&c\end{array}$$

posted by yuchan at 07:00 | Comment(0) | python

20170122

LaTeX atan2の場合分けを、arrayで書く

atan2のif分岐 を、書こうと思った。

まずは、文字列の準備や、基本的な使い方の確認。

python文字列→tex(pythonのモジュールを、少し編集して、Windowsでも使えるようにする。)→pdf→さらに、imagemagickなどで、pdf→pngファイル等の画像化 の手順で作成する。

“C:\Python27\Lib\site-packages\tex.py”を、
close_fds=True → close_fds=Noneにした。

(これで何か不具合起きたらゴメン。責任はとらない。)

pythonの文字列を用意する例

python文字列は、一行で書くので、(行末尾に\マークで改行できる。)

document = r"\documentclass{article}\pagestyle{empty}\usepackage{amsmath}" + ur"\begin{document}\parindent = 0pt$ \sin\theta$\end{document}"

と書いて、sinθとかになる。

# -*- coding: utf-8 -*-
from tex
import latex2pdf
import subprocess# 上のと同じ文字列。

document = r"\documentclass{article}\pagestyle{empty}\usepackage{amsmath}" + ur"\begin{document}\parindent = 0pt$ \sin\theta$\end{document}"

pdf = latex2pdf(document)#これで、pdfのバイナリデータができる。
# pdf = latex2pdf(unicode(document))#エラー時は、これを試してください。
fileName="tmp.pdf"
a = open(fileName,"wb")#バイナリモードで開く。通常のテキストでは、文字化けする。
a.write(pdf)#バイナリファイルに、バイナリデータを書く。
a.close()

文字列を、for構文やif分岐などで、操作して、数式アニメをするのが、自分の好きなやり方。
(その際は、ファイル名を連番などにする。)
matplotlibでも、自分のtex環境を使用できるが、なぜかエラー起こるので、使わない。)

ur文字列

ユニコードかつ\→\\に自動変換してくれるur

ユニコードロー文字列を使いたくなる。
上のコードの抜粋の、

pdf = latex2pdf(document)

で、文字コードでエラーが起こったので、そういった工夫をしていた。
latex2pdfは、引数に、ユニコード文字列がいるからだ。

だから、

ur"abcd"

とか、urを文字列の横に書くことになる。

ur文字列の落とし穴

しかし、このやり方だと、下記のコードでエラーが出る。
理由 urでは、\uと表示できないから。(python3ではこうならないらしい)

ur"\u""""SyntaxError: (unicode error) 'rawunicodeescape' codec can't decode bytes in position : truncated \uXXXX"""

ユニコード文字列の落とし穴の回避策

  1. \uが入っている部分だけ、r”\u”+とか分けて書く。分けて書く。


    document = r"\documentclass{article}\pagestyle{empty}\usepackage{amsmath}" + ur"\begin{document}\parindent = 0pt$x^n = \begin{cases}1 & (n=0) \\ x \cdot x^{n-1} & (otherwise)\end{cases}$\end{document}"
    pdf = latex2pdf(document)
  2. 全てロー文字列(r”hogehoge\usepackage{hoge}”)のみで書いて、後からunicode。


    document = r"\documentclass{article}\pagestyle{empty}\usepackage{amsmath}\begin{document}\parindent = 0pt$x^n = \begin{cases}1 & (n=0) \\ x \cdot x^{n-1} & (otherwise)\end{cases}$\end{document}"
    pdf = latex2pdf(unicode(document))

これでできた。

arrayをbeginして、場合分けを書こうとする。

このサイトを参考にatan2の説明を、LaTeXで書く。

アレイ使用上の注意点

アレイにとって、()は両方とも必要で、カッコがない時は、ピリオドを付けるべきだと。

良し悪しLaTeXコードダメな理由
$$\left[\begin{array}{lll} a & a & a \\ b & b & b \\ c & c & c \end{array}\right]$$ 
×$$\left[\begin{array}{lll} a & a & a \\ b & b & b \\ c & c & c \end{array}\right$$右側のカッコない
×$$\left\begin{array}{lll} a & a & a \\ b & b & b \\ c & c & c \end{array}\right]$$左側のカッコない
$$\left[\begin{array}{lll} a & a & a \\ b & b & b \\ c & c & c \end{array}\right.$$ 
$$\left.\begin{array}{lll} a & a & a \\ b & b & b \\ c & c & c \end{array}\right]$$ 

()、[]や、ピリオドが無いと、

! Missing delimiter (. inserted).

で止まる。

atan2

document = r"\documentclass{article}\pagestyle{empty}\usepackage{amsmath}" + ur"\begin{document}\parindent = 0pt$\rm\tan\theta = Imaginary(\it{z}\rm)/Real(\it{z}\rm) = " + r"\u" + ur"nderline{\tan (\theta + \pi)\ or\ \tan (\theta - \pi)}\\\\ \rm Argument\ \theta (-\frac{1}{2}\pi\leq\theta\leq\frac{1}{2}\pi)\\ \rm Using\ inverse\ trigonometric\ function\\ \rm\theta = arctangent(\tan (\theta ))\\ \rm= \frac{1}{2}\it{i}\rm(log_{\it{e}}\rm(1-\it{i}\rm\tan (\theta ))-log_{\it{e}}\rm(1+\it{i}\tan (\theta )))\\\rm It\ can\ be\ \theta,\ \theta+\pi,\ \theta-\pi\ or\ 0\ \\\\ \rm Argument\ \phi (-\pi\leq\phi\leq\pi)\\ \left. \begin{array}{ll}\rm if\ x>0, & arctangent(\frac{Im(F(k))}{Re(F(k))}) \\\rm if\ x<0\ and\ y\geq0, & arctangent(\frac{Im(F(k))}{Re(F(k))})+\pi \\\rm if\ x<0\ and\ y<0, & arctangent(\frac{Im(F(k))}{Re(F(k))})-\pi \\\rm if\ x=0\ and\ y>0, & +\frac{\pi}{2} \\\rm if\ x=0\ and\ y<0, & -\frac{\pi}{2} \\\rm if\ x=0\ and\ y=0, & Undefined\end{array}\right\} =Argument\phi$\end{document}"

pdf = latex2pdf(document)
fileName="tmp1.pdf"
a = open(fileName,"wb")
a.write(pdf)
a.close()
$$\rm\tan\theta = Imaginary(\it{z}\rm)/Real(\it{z}\rm) = \underline{\tan (\theta + \pi)\ or\ \tan (\theta - \pi)}\\\\ \rm Argument\ \theta (-\frac{1}{2}\pi\leq\theta\leq\frac{1}{2}\pi)\\ \rm Using\ inverse\ trigonometric\ function\\ \rm\theta = arctangent(\tan (\theta ))\\ \rm= \frac{1}{2}\it{i}\rm(log_{\it{e}}\rm(1-\it{i}\rm\tan (\theta ))-log_{\it{e}}\rm(1+\it{i}\tan (\theta )))\\\rm It\ can\ be\ \theta,\ \theta+\pi,\ \theta-\pi\ or\ 0\ \\\\ \rm Argument\ \phi (-\pi\leq\phi\leq\pi)\\ \left. \begin{array}{ll}\rm if\ x>0, & arctangent(\frac{Im(z)}{Re(z)}) \\\rm if\ x<0\ and\ y\geq0, & arctangent(\frac{Im(z)}{Re(z)})+\pi \\\rm if\ x<0\ and\ y<0, & arctangent(\frac{Im(z)}{Re(z)})-\pi \\\rm if\ x=0\ and\ y>0, & +\frac{\pi}{2} \\\rm if\ x=0\ and\ y<0, & -\frac{\pi}{2} \\\rm if\ x=0\ and\ y=0, & Undefined\end{array}\right\} =Argument\phi$$

\displaystyle\LaTeX のソースコードとしては読みにくくても、htmlにコピペして、mathjaxする分には使いやすいという特典付きの、一行LaTeX文字列。英語は、合っているかは知らん。数学も怪しい。

posted by yuchan at 07:00 | Comment(0) | python

20170113

PyQtGraph メモリーリークとの戦いを制した。

メモリーリークとか、知らなかった。

正直な話、今でも、分かってないし、問題点がメモリーリークだったのか自信ない。
意図せずして、だんだんメモリー量が増えてっちゃうことを、メモリーリークと言うんだと思うんですが。

「フィルタ処理→再プロットを20回くらいやると、フリーズ→強制終了しちゃう」という認識だった。

うすうす気付いてはいたけど、タスクマネージャーで観察して、惨状を知った。
プロットするたびに、4割りとか、5割りとかメモリが増えてっていっていた。

  • うごけばいい、だけじゃダメ
  • 適当にコードしちゃいけない

と初めて気付く。
一歩だけ、初心者抜けた。

pyqtgraphで、「こういう風に書いたら、こうした方がいい」という一つの指針ができた。

プロットを消したい時には、とりあえず、removeではなく、clearを使って消す。

ダメなコード

必要なモジュール

  • PySide
  • PyQtGraph
  • numpy

Windowsだったら、pipよりも、.exeでインストールした方がいい。
ubuntuだったら、

  1. sudo apt install hogehoge
  2. pip install hogehoge

の優先順位で。

このコードをa.pyとでも保存して、cmdで、 python a.py
とでも、入力する。
すると、plotと押すたびに、メモリーが増えていくアプリが出てくる。

一応、プロットは、remove(p1)ってところで、消しているつもり。
でも、removeでは、メモリー量減らない。このアプリケーションでは、消えているところが分かりませんが、プロット消えても、データが消えてない。clearを使うべき。

tryで囲ってあるのは、初回プロット時にエラーが起こって、そこで処理が止まらないようにするため。

from PySide import QtCore, QtGui
import pyqtgraph as pg

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.graph01 = pg.PlotWidget(self.centralwidget)
self.graph01.setObjectName("graph01")
self.verticalLayout.addWidget(self.graph01)
self.psbtn = QtGui.QPushButton(self.centralwidget)
self.psbtn.setObjectName("psbtn")
self.psbtn.setText("Plot")
self.verticalLayout.addWidget(self.psbtn)
QtCore.QObject.connect(self.psbtn, QtCore.SIGNAL("clicked()"), self.plot)

def plot(self):
try:
self.graph01.remove(p1)
except:
pass
frq = 10.0
duration = 1.0
samples = 1001
x = np.linspace(0, duration, samples)
rad = np.linspace(0, 2 * np.pi * frq, samples)
y = np.sin(rad)
p1 = self.graph01.plot(x, y)

import sys
import numpy as np

pg.setConfigOption('foreground', 'k')
pg.setConfigOption('background', 'w')

class ControlMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ControlMainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)

if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
mySW = ControlMainWindow()
mySW.show()
sys.exit(app.exec_())

ちゃんと動く方

from PySide import QtCore, QtGui
import pyqtgraph as pg

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
MainWindow.setCentralWidget(self.centralwidget)
self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.graph01 = pg.PlotWidget(self.centralwidget)
self.graph01.setObjectName("graph01")
self.verticalLayout.addWidget(self.graph01)
self.psbtn = QtGui.QPushButton(self.centralwidget)
self.psbtn.setObjectName("psbtn")
self.psbtn.setText("Plot")
self.verticalLayout.addWidget(self.psbtn)
QtCore.QObject.connect(self.psbtn, QtCore.SIGNAL("clicked()"), self.plot)

def plot(self):
try:
self.graph01.clear()
except:
pass
frq = 10.0
duration = 1.0
samples = 1001
x = np.linspace(0, duration, samples)
rad = np.linspace(0, 2 * np.pi * frq, samples)
y = np.sin(rad)
self.graph01.plot(x, y)

import sys
import numpy as np
pg.setConfigOption('foreground', 'k')
pg.setConfigOption('background', 'w')

class ControlMainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ControlMainWindow, self).__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)

if
__name__ == "__main__":
app = QtGui.QApplication(sys.argv)
mySW = ControlMainWindow()
mySW.show()
sys.exit(app.exec_())
posted by yuchan at 07:00 | Comment(0) | python

20170112

Scipyのloadmatで、読めるファイルと、読めないファイルがある。

picoscopeでとったデータ解析

PCオシロ、picoscopeで、計測したデータを解析している。

測定データの保存は、.psdataで行った。バイナリファイルなのでスペース節約になるし、後からデータをいじりようが無くなるので(今なら時間かければ、解析できそうな気はする)。

データは、.matに、エクスポートし、scipy.ioのloadmatで読む。

しかし、データ解析の時には、.mat(.matlabのデータ形式)にして、scipyのloadmat関数(.matを読める関数。)を使って解析する。

picoscopeのソフトウェアは、ローパスフィルタしかついていないので、信号解析する上で、不満があった。だから、自作ソフト上で、信号解析をしたい。しかし、直接、.psdataを、pythonで読むことは難しい。(多分、データ構造をメーカーが公開していないと思う。)

幸い、picoscopeには、.txt, .csv, .mat (, .jpg, .png, や、gifアニメ! )などの形式も、エクスポート可能だった。
これらがwindowsのコマンドラインから、バッチ処理できることは、以前書いた

.matは、フォーマットが公開されているらしく本家の数学系ソフト「Matlab」以外のソフトでも取り扱えたりする。

.matで、保存しておけば、テキストよりも軽量だし、loadmatで読んだときは、辞書形式で読み込んでくれるから、扱いが楽。

既に、.matを読むプログラムはできていた

この .matデータを、読み込んで、fftしたり、firでフィルタしたり、短時間fftとか、ウェーブレット変換とかしたりするソフトを、以前作った。
当然、scipyのloadmat関数を使った。
Ach,Bchあるが、両方ある場合も、片方しかない場合も読めるようにプログラムしたつもりだった。
準備は万全であるかのように思えた。

Scipyのloadmatで、読めるファイルと、読めないファイルがあった

同じ.matファイルなはずなのに、読めるファイルと、読めないファイルがあった

読めなかった場合のエラー

ValueError: Not enough bytes to read matrix 'B'; is this a badly-formed file? Consider listing matrices with `whosmat` and loading named matrices with `variable_names` kwarg to `loadmat`

stackoverflowにも出てた。

https://github.com/scipy/scipy/issues/2452

原因はExtraSamplesか?

“B”がおかしいってことは分かっているんだけど、直しようがないし。
picoscopeでは、壊れているようには見えない。

scilabで.matファイルを読ませて、変数ブラウザで確認したところ、
読めるファイルは、ExtraSamplesが、0だったのに対して、
読めないファイルは、142とかになっていた。
「読めないファイルは、いつもと違うことやってたかなぁ」と思い返してみると、

読めない方のファイルでは、測定時に、”測定結果”の”測定結果の追加 AC RMS”とかをやっていた気がする。
まずい。いつもはやらなかったのに、余計な気をまわしてやったのがあだとなった。めんどい。picoscopeのアプリケーションで見る分には、有用なデータなのだが、.matにして、python+scipyでロードして使うときは、こんなめんどくさいことになるとは。

あと、おかしいな所と言ったら、AとBでは、レンジが違うという所位しかない。

まあ、この際、原因なんかどうだっていい。解決策ですよ。とりあえず動くものを作ろうとしているので、どんな事があろうとも、想定した通りに動かないのはダメ。

解決策 Bは読まない

もともと、Bchは、余り必要なかったから、読まない事にした。
テキストデータには、ちゃんと出てくるのになぁ。

エラーには、

  1. whosmatを使って、行列をリスト化して(中に入っている変数名を見て欲しいんだと思う。)
  2. loadmatの、キーワード引数 variable_namesに、その変数名を入れて使う。

と書いてあるんだと思う。2は、問題のあるものは除外した方がいい。
whosmat使えば、わざわざ、scilab立ち上げる必要なかったか。

とりあえずインタプリタで実行する。
ソフト上で、ファイルを読み込むときは、ファイルブラウザを使って、ファイル名を取得していたけど、今回は、手入力をする。
ブラウザで、Shift+右クリックで、パスのコピー(A)をして得たアドレスを、そのまま貼り付けてはいけない。

IOError: [Errno 2] No such file or directory:

と、なるから、ファイルを読む時は、文字列の前に

ur"C:\hogehoge\20160101-001-01.mat"

といった具合に、ユニコードで、ロー文字列にしてもらはないとだめ。
(uは無くても動いた。)

from scipy.io as sio

filename = ur"C:\hogehoge\20160101-001-01.mat"
sio.whosmat(filename)

これで、loadmatした時に、返ってくる辞書の、キー一覧が手に入った。
あとは、問題があるものを、除外して使えばいい。
というか、自分は、必要のあるものだけを、ピックアップして使った。

from scipy.io.loadmat

arr = ['A','Tstart','Tinterval','Length']#, 'B']#exclude "B"
filename = ur"c:\hogehoge.mat"
data = loadmat(filename, variable_names=arr)
posted by yuchan at 07:00 | Comment(0) | python

20161213

Matplotlibで、動くプロットをした。

import matplotlib.pyplot as plt

x = range(101)
y = xl

ine, = plt.plot(x,y)
plt.ion()

for
i in range(1,100):
y2=[y[i2]/i for i2 in range(len(y))]
line.set_ydata(y2)
plt.draw()
plt.pause(0.05)

Matplotlibで、動くプロットをした。

matplotlibでプロットする際、pythonコンソールから、plt.show()をした時点で、コンソールに入力できなくなってしまう。
それを、解消するために、plt.ion()というのが使われる。
plt.ion()を使えば、インタラクティブモードのままで動いてくれる。
matplotlib.pyplot.ionの事。
もとに戻すには、matplotlib.pyplot.ioff

次々に、プロットしたデータを更新するために、
line.set_ydata(y2)
plt.draw()
とした。
プロットを、後から呼び出したり再利用するために、インスタンス化したのがline。

plt.pause(0.05)
がないと、なぜか動かない。
理由は不明。
ただ、入れれば、動くので、入れる。

差分方程式を勉強したい。

このサイトで、公開されているコードを使って、差分方程式を0から勉強しようとているが、pythonかライブラリのバージョンが違うためか、動いてくれない。
とはいえ、コードが書いてあるサイトは、そうはないので、これを何とか動くようにする。

forループの最後に

    plot.pause(0.1)

と入れるだけで、動いてくれた。
(plotとあったが、慣例的にはplt.pause(0.1)とする所。)
熱伝導がヌルヌル動きますね。

atomやめ。markdown hereを試す。

このブログに載ってた。

gmailも、markdownできるし、ブログの編集画面も、markdownにできる。

優秀すぎる。

欠点としては、コード部分(```hogehoge``` で囲む部分)は、他のマークダウン環境では、改行してくれていたが、改行されなかった。markdown hereのお作法か、それとも、windowsの改行コードではないだけなのか。

シンタックスハイライト部分を、改行したかったら、通常の改行と同じように、改行後に半角スペース2個入れないと、改行してくれない。
上記を試しても、一旦は改行されるものの、「保存する」ボタンを押したら、元に戻ってしまった。
改行は自分でやらないとダメらしい。
もし、長いコードだったら、pygmentを使わなければならないかもしれない。

posted by yuchan at 07:00 | Comment(0) | python

20161211

PyOpenGLのインストール

タグ:PyOpenGL
以前、pyqtgraphで必要だったので、pipからopenglをインストールした。

その時は、問題なく動作していた。


しかし、openglを直接使おうとすると、

OpenGL.error.NullFunctionError: Attempt to call an undefined function glutInit, check for bool(glutInit) before calling

というエラーが出てしまった。


ここ(PyOpenGLをインストールしようとして少しハマった)の記事を参考にして、再インストールしようとした。

しかし、コマンドをコピペしてたら、(**当たり前ですが、**)バージョンの違いからインストールできなかったので、再インストールの手順を書いた。


手順

1. pipでインストールせず、Python Extension Packages for Windows - Christoph Gohlkeから.whlファイルをダウンロードする。

2. コマンドプロンプトで、cdして、ダウンロードしたフォルダへ移動。(ブラウザで、Shift+右クリックで、「コマンドウィンドウをここで開く(W)」が出現する裏技もある。)

3. pip install ダウンロードしたファイル名 でインストールする。


1でダウンロードしたバージョンが、3で入力するバージョンと違うから、インストール時に、「ファイルがありません」とか返ってきてた。

20161210 01.png

20161210 02.png

ブラウザ上で、shift+右クリックで出てくるコマンドが、便利です。

「コマンドウィンドウをここで開く」を使えば、ファイル名を入力するだけで、実行できるし、

「パスのコピー」をすれば、ファイル名を絶対アドレスでコピーしてくれるので、ここまでcdで移動しなくても実行できる。
タグ:PyOpenGL
posted by yuchan at 07:00 | Comment(0) | python

20161208

pythonのvirtualenvを、windowsで試した。





Markdown to HTML




手順


pythonのvirtualenvを試す。
下のような手順で作った。
サイズ16.7MB、ディスク上のサイズ19.5MBくらいのサイズになった。



  1. pip install virtualenv

  2. virtualenv hogehoge

  3. cd hogehoge\Scripts

  4. activate

  5. python

  6. import 標準モジュール以外の、モジュールが、import出来なくなっている事を確認。

  7. deactivate で、仮想環境から出る。

  8. rmvirtualenv hogehoge もしくは、hogehogeフォルダを消すことで、仮想環境を消す。


ラッパーは使わない


virtualenvwrapper-winを使用すると便利。
フォルダー名で仮想環境に入れるコマンド


workon hogehoge

が使えるようになる。

ただし、コレを使うためには、


virtualenv hogehoge  

ではなく、


mkvirtualenv envname

で、仮想環境で使うフォルダを作らなければならない。


virtualenvwrapper-winは使用しない。


virtualenv利点


こういう時に使うそうです。



  1. pythonのバージョンを変えて、動くか試したい。

  2. 外部モジュール(ライブラリ)をインストールしていない状態にしたい。


一個ずつ見ていく


pipを使って、virtualenvをinstallしています。


pip install virtualenv

myenvという名前の仮想環境を作る。


virtualenv hogehoge

New python executable in C:\Users\yusuke\Documents\hogehoge\Scripts\python.exe
Installing setuptools, pip, wheel…done.

とか表示される。

結構時間がかかった。上記が標準出力に出てきた。


virtualenv hogehogeすると、hogehogeフォルダができる。
その中に入る。


cd hogehoge

さらに、スクリプツとかいうところに入り、activateを実行して、仮想環境に入る。


cd Scripts
activate

中途半端だが、ここで終わる。


atomを本格的に使ってみた第一号

やっぱだめだわ。

posted by yuchan at 07:00 | Comment(0) | python

20161011

PyQtGraphでも、Diagramが書けたらしい・・・

ここ最近、Blockdiagを使って、ダイアグラムを書いていた。
ただ、結局シンプルな(地味な)ダイアグラムしか描けなかったので、思い切ってpowerpoint使ったら、思いのほかきれいに描けたので、もうアクロバティックな真似はしないと、心に決めた。
しかし、PyQtGraphに、ダイアグラム作成機能がついているというなら、話は別だ。
それを早く言ってくれよ。
posted by yuchan at 07:00 | Comment(0) | python

20161008

markdownエディタatomで、pythonのsyntax highlight

Windows Live Writerとか、ためしたけど、投稿時間の設定とかがいまいちだった。
下書きを保存しても、投稿日が、現在時刻よりも前だと、公開されるし。
公開されていない(ブログに表示されない)のに、「公開」の状態表示になってしまうし。

20161005-2.png

しかし、atomを使用したら、もうほとんど全部解決してしまった。

まず、#とかの、markdown書ける!

```python
import hoge as hogehoge
```
で、pythonのsyntaxhighlightしてくれる!
もう、pygmentsも必要ないかもしれない。

Ctrl + Shift + M で、プレビュー表示!
さらにプレビュー画面から右クリックで、
save as HTML!!

後は、このエディタから投稿する方法を探るだけ。

copy as htmlはスタイルが排出されないので、.cssとか.less自分で設定する必要がある。
posted by yuchan at 07:00 | Comment(0) | python

20161006

Blockdiagで書いてたこれは、E-BOMっていうのか

引き続きBlockdiagを試す。

E-BOM

そういう言葉があるのね。

https://ja.wikipedia.org/wiki/BOM_(%E9%83%A8%E5%93%81%E8%A1%A8)

ここを見ていて初めて知った。

http://99blues.dyndns.org/blog/2010/12/blockdiag-%E3%81%A7%E3%81%84%E3%82%8D%E3%81%84%E3%82%8D%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%BF%E3%82%8B/

Blockdiag調べてて、偶然知った。

電気系の人は、こういうのを、当然のごとく知っているのだろうか。

確かに回路図だけじゃ、設計図にならないわ。。。

なんかトランスインピーダンスアンプを設計、製作した後、それを使った実験を人に説明しても、理解してもらえなくて、もどかしさを感じていた。単に電流を測っているだけなのにもかかわらず。

唯一、「なんとなく分かった」といってくれた人には、パワポで作ったダイアグラムを使って説明した気がする。

当然日本語でも作りたくなるわけで

フォントを、日本語で設定するとかいろいろあるみたいですが、自分の使った時には、特に設定不要でした。

http://blockdiag.com/ja/blockdiag/introduction.html#blockdiag-font-configurations

http://d.hatena.ne.jp/enduser/20111216/1323964750

このやりかたで書くと、

blockdiag -f C:\Windows\Fonts\meiryo.ttc 002.diag

が正しい書き方ですが、

blockdiag 002.diag

でも、普通に動きました。

002

blockdiag {
A [label = "FG\nor\nDC"]
B [label = "抵抗 1 kΩ"]
C [label = "センサー"]
D [label = "I/V 変換アンプ"]
E [label = "増幅度"]
F [label = "オシロスコープ"]
G [label = "解析"]

A -- B -- C -- D, E
D, E -- F -- G

}

日頃の行いがいいせいでしょうか。

ちなみに、ファイル作成時に、文字コードセットをJISではなく、utf-8に変えました。

JISのままだと、エラーが返ってきました。

 

折り返しではまった

これは、

008

こう書いたら、できた。

blockdiag {

A [label = "FG or DC"]
B [label = "Resistor 1 kΩ"]
C [label = "Sensor"]
D [label = "I/V convereting"]
E [label = "Oscillo scope"]
F [label = "Analyze"]

A -> B -> C
F <- E <- D
C -> D[folded]

}

C –> D[folded]の[folded]を忘れると変になる。

008

縦書きでもできたけど、無駄に折れ曲がったり、色がついてしまった。

009

blockdiag {

A [label = "FG or DC"]
B [label = "Resistor 1 kΩ"]
C [label = "Sensor"]
D [label = "I/V convereting"]
E [label = "Oscillo scope"]
F [label = "Analyze"]

A -> B -> C
F <- E <- D
group{
orientation = portrait

C -> D
}
}

コメントアウトは#でできた。"""はダメ。

pythonなので、#はコメントアウトに使用できた。

しかし、

"""で囲った区間は、コメントアウトにならなかったし、うまく動いてなかった。

blockdiag{
A[label = "AAA"]
B[label = "BBB"]
C[label = "CCC"]

A -> B
#B -> C
"""
C -> A
"""
}

010

本当は、下の様になってほしかった。

010

posted by yuchan at 07:00 | Comment(0) | python