20161005

Kindleデビュー (「行列プログラマー ―Pythonプログラムで学ぶ線形代数」を買うにあたって)

本が高かったので諦めた。

この本の広告が、頻繁に出ていたので、とりあえず買ってみようと思っていた。

内容も気になるし。

もっと言うと、この本を買って、中身を試したり詳細調べたりして、(問題の無いよう大幅に修正の後)ブログに投稿しようかなぁと考えていた。

5,832円…高い。もっと他の選択肢は無いのか?

とりあえず、この時点で買うのを諦めた。

原書(英語版)…読めるの?

オーライリーの本なので、当然原著があるので、そっちを頑張って読もうかなぁと思い、出版社のサイトを見ると

とあり、リンクが貼ってあったが、ここのリンクからは、買えなかった。

理由は、amazon.comだったから。

amazon.co.jpからじゃないとダメ。(co.jpのアカウントは、.comでは使えないらしい。)

だから…

おれがうまいこと検索してリンク貼っといてやったぜ!

1,189円!?と思って開いたら、kindle版だった。

kindleなんか持ってねぇし。

Kindleなくても読めた

Kindleアプリっていうのがあって

http://amzn.to/2dukPRr

無事kindleデビュー

1,200円分の元は、この本の内容紹介のアフィでとってやるぜ。

尚、2016年10月5日現在、翻訳本のKindle版は、まだなようです。

PCからもXperia(android)からも読めた!

2016100520161005_154338

 

kindleメリット、ディメリット

これで部屋でごろ寝していても、本を見るために、起き上がらなくても済む。

今後の本の購入は、本格的にkindleに移行しようかなと思い、ちょっと考えた。

 

これを見ていて、kindleやっぱり、いらねぇじゃんってやっぱり思った。

買ったら、いい事あるのかなぁ。逆に欲しくなってきたが…

携帯のディメリットは、電源とストレージ容量、画面の大きさがある。

Playストアで、kindleアプリがsd保存に対応していないと文句書いてた人もいた。

持ち歩くにしても量には限りはある。

ただ、全部持ち歩く必要は、どこにもないけど。

ダウンロードしないでも、amazonからいつでもできる。

通信料はかかるし、電池は食うけど。

 

電子書籍のディメリットは、人にあげたり、売ったりできない。

各ご家庭にお一つ…以上必要。

単に家族とか身近な人に見せてあげるにしても、携帯だったら、携帯の他の機能が使えなくなってまずい。このディメリットは、kindleを家置きしておけば、解決する。が、一人が漫画を読み始めたら、他の人が、お勉強できないなんてことになって、二つ以上、もしくは家族一人につき一つのデバイスが必要になったりするかもしれない。

しかし、その内、個人で携帯持ち歩き始めると、わざわざkindleなんか持ってなくても、携帯あるしとなる。

本だって古くなって、黄ばんできたり、折れ曲がったりするように、機械だって古くなったり、故障したりする。お茶をこぼしたりは、できないだろうし、ジュースの類はもっとだめ。

 

メリットディメリットを考えてみたが、表に書いてまとめたりはしない。

欲しくなったらその内、買う。

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

20161004

python blockdiagで、ダイアグラムを書く。

タグ:Blockdiag

Blockdiagは、ブロック図が描ける。

001

diagram {
  Y -> o -> s -> h -> i -> h -> a -> r -> a
}

簡単な使い方としては、上の内容を書いたテキストファイルを、例えば、a.txtとすると、

blockdiag a.txt

を指定するだけで、.png画像が、同じフォルダにできる。

その道の最大手は。

Microsoft visio!七万円位するソフトです。

https://products.office.com/ja-jp/visio/flowchart-software

高いので、代わりのソフトを…と思う方もかなりいるようです。

Visio の代替ソフトウェアおススメ5個

Libre Officeも代わりになるようです。http://pcsket.com/free-office.html

日本語サイトがある

http://blockdiag.com/ja/index.html

Authorは、Takeshi KOMIYAさんだそうです。

インストール

事前準備

http://blockdiag.com/ja/blockdiag/introduction.html#id10

windowsでやった。他は、入っていたらしく、pipで一発だった。

pip install blockdiag

Collecting blockdiag
  Downloading blockdiag-1.5.3-py2.py3-none-any.whl (2.7MB)
    100% |################################| 2.7MB 155kB/s
Requirement already satisfied (use --upgrade to upgrade): setuptools in c:\python27\lib\site-packages (from blockdiag)
Collecting funcparserlib (from blockdiag)
  Downloading funcparserlib-0.3.6.tar.gz
Collecting webcolors (from blockdiag)
  Downloading webcolors-1.5.tar.gz
Collecting Pillow (from blockdiag)
  Downloading Pillow-3.3.1-cp27-cp27m-win32.whl (1.2MB)
    100% |################################| 1.2MB 504kB/s
Building wheels for collected packages: funcparserlib, webcolors
  Running setup.py bdist_wheel for funcparserlib ... done
  Stored in directory: C:\Users\yusuke\AppData\Local\pip\Cache\wheels\cf\77\39\7940a5ce616295452200201f265fec292cb5dab48f7f404baf
  Running setup.py bdist_wheel for webcolors ... done
  Stored in directory: C:\Users\yusuke\AppData\Local\pip\Cache\wheels\e4\96\40\b942844340df48ffb8e242d9cdf7a004710eafe2a5cacf5421
Successfully built funcparserlib webcolors
Installing collected packages: funcparserlib, webcolors, Pillow, blockdiag
Successfully installed Pillow-3.3.1 blockdiag-1.5.3 funcparserlib-0.3.6 webcolors-1.5

多分問題ないと思われます。

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

20161002

PythonでPicoscopeのバッチ処理(txtのエクスポート)する。

import subprocess
import glob

fname = r"F:\signal2.psdata"

cmd = "picoscope /c \"" + fname + "\" /f txt /b all"
subprocess.call(cmd, stdin=True)

dname = fname[0:fname.rfind(".psdata")]
list_fname = glob.glob(dname+"\\*")

for i0 in list_fname:
print(i)


PCオシロスコープのPicoscopeをよく使う。
Picoscope3224とPicoscope5244Bを持っている。

Picoscopeで測定したデータは.psdataとして保存される。
.psdataは、バイナリ形式のデータなので、このままでは、Picoscopeの中でしか使用できない、

Picoscope(ソフトウェアの名前も同じでややこしい)を使えば、画像ファイルや、.txtなどに、エクスポートできる。
実は、この操作は、WindowsにPicoscopeがインストールされているのであれば、以下のコマンドで、コマンドラインから、実行できる。(Linuxからはできない。)
https://www.picotech.com/support/topic14227.html


picoscope /c "C:\<dir name>\*.psdata" /f txt
picoscope /c "アドレスパス" /f ファイルフォーマット

「...例えやれたとしても、そんな面倒なことやらないでしょ」と思うかもしれないが、やった。
排出される.txtデータは、最初に
時間(s) 電圧(V) 電圧(V)
と、文字列であるし、
Ach,Bchで、mVとuVとか、表記が違うときあるし、
時間も、ns〜sまで、divの設定によって、自動的に変わってしまうからだ。

そういうのを、条件分岐した上で、掛け算・割り算で処理して、別名ファイルで保存するのは、加工というか、セーフだと思っております。
まずいのであれば、Excelで数値処理するのもまずいよね?
やっても大丈夫だと思っております。

ちょっと浮動小数点に変換した都合上、小数点以下が、汚くなっちゃうけど・・・
数値としては、どうやらあっておりますので、誤差の範囲内だと思われます。
今度、もう少し詳しく調べるつもりではいる。

あと、Bchは、印可電圧を同時に参照したいから、録っていただけで、詳しく解析したりとかするつもりはないので、Achだけにして、txt排出すれば、データ容量浮かせる。

自作解析ソフトが、1chデータしか対応していないのも理由の一つ。

.txtファイルをエクスポート

ファイル少し加工

別名で保存
したりしたくなったたので、pythonでできないか考えた。

import subprocess
import glob

fname = r"F:\signal2.psdata"

cmd = "picoscope /c \"" + fname + "\" /f txt /b all"
subprocess.call(cmd, stdin=True)

dname = fname[0:fname.rfind(".psdata")]
list_fname = glob.glob(dname+"\\*")

for i in list_fname:
print(i)

まず必要なモジュールのimport
fnameはファイルパスを文字列で。

この時、ただの文字列よりも、r""としたraw文字列のほうがいい。
パスを書くと¥マークがエスケープ文字だから、文字化けするからだ。
この時知っておくと便利な技が、ブラウザで、.psdataをShift+Right click でcopy pathができるので、
r
のすぐ後ろにpasteすれば、一発で書ける。

cmdはこの後、Windowsのcmdで実行して欲しい命令を""で囲った文字列で表現したものだ。
基本的に、この記事で最初に書いた命令になっていると思う。
subprocess.call()の中に入る文字列が、Windowsのcmdで実行される。
.psdataのファイルサイズによっては、ものすごい時間がかかる。
処理している.psdataがあるフォルダに、新しくフォルダができているので、進捗状況はブラウザから確認できると思う。F5キーを押しながら見てください。
dnameは、新しくできたフォルダの名前になるように書いてあるが、最後にspaceが入っていると、機能しませんでした。
このdnameはfnameから、.psdataを除いたフォルダ名になることが分かっているので、fnameをindexingして、取得しました。
範囲は、
最初から([0:)、
文字列fname中に.psdataがないか後ろから検索して、会った場所のindex...まで(fname.rfind("psdata")])
これで、フォルダ名になったはず。
さらに、このフォルダの中に入っているファイル名一覧を取得して、リスト型にして変数list_fnameに保存する命令が、
list_fname = glob.glob(dname+"\\*")
globというのが、パスの文字列を検索する命令で、
ワイルドカード(*)にしておけば、全部見れます。
これ以降は、省略していますが、for中に、変数iを使って各ファイルごとに処理すればいいと思います。
出てくるtxtファイルは、タブ区切りになっているので、
txt = np.loadtxt(i0, delimiter="\t", skiprows=3)としたり、
x軸では、s, ms, us, ns
y軸では、V, mV, uVが混在したまま出てくるので、柔軟にこれらに対応するためには、それなりに色々要る。
2~4ch測定したのであれば、Ach, Bch, Cch, Dchどれらを選ぶのかも、問題になる。
それは、また今度書く。
posted by yuchan at 07:00 | Comment(0) | python

20161001

Windowsで、Pygmentsを標準入出力(stdin,stdout)経由で使う。

(自分用メモ)これは、その内、きれいにしてからQiitaに書く。
pygmentsは、syntaxhighlighter。
以前、http://naga-tsuzuki.sblo.jp/article/175175856.html
で試した。

準備として、
pip install pygments
でpygmentsを入手するのを忘れずに。
また、-O noclasses=Trueなどを使用しないのであれば、cssをいじる必要がある。
http://field-notes.hatenablog.jp/entry/20111221/1324434018

さくらのブログが、Qiitaの様に、マークダウンでsyntaxhighlightできないので、pygmentsを使っている。
今までプログラムをubuntu上でやっていたのに、なぜか、最近Windowsばかり使っている。
なぜかは分かりません。
ubuntuの端末(terminal)とコマンドライン(cmd)上でのpygmentsの使い勝手が違ったので、メモする。

(普通のやり方)
Pythonのコードを、a.pyに保存。

pygmentize -f html -l python -o a.html a.py

a.htmlから、コピペ。

(標準入力を使ったやり方)
pygmentize -f html -l python -O noclasses=True

標準入力にpythonのコード書く。

???

標準出力に表示されるのをコピペ。

下のやり方は、コマンドライン上だけで作業ができるというメリットの他にも、
後に残らないという、メリット(かつディメリット)がある。
pygmentize -l python -f html -O noclasses=True
-l python …………………………lexer(構文解析器)は、python用のを使う。
-f html ………………………………フォーマットはhtml
-O noclasses=True ……これがあると、cssいじらなくてもよくなる代わりに、毎回、htmlタグに色指定が入り、編集時に、ごちゃごちゃする。

-Oは、-oとは違う。(大文字小文字で意味が違う。)
The -o option gives an output file name. If it is not given, output is written to stdout.
-oオプションは、出力ファイル名を与えます。もし与えられなかったら、出力は、stdout(標準出力)に書かれます。
だそうです。訳があっていればいいのですが。
-o hogehoge.pyを抜かすと、標準入力画面で入力できる様になり、標準出力に、syntaxhighlightされたものが排出されるそうですが...
Windowsの標準入力から抜け出せないでござるの巻だった。
そう、要は↑これが問題だったんだけど...
ubuntuではできた。

pygmentsは、syntaxhighlighter。
以前、http://naga-tsuzuki.sblo.jp/article/175175856.html
で試した。
このやり方は、標準入力、標準出力を使っている。

標準入(出)力って、解説見ても意味わかんない。
使わないと。
http://bacspot.dip.jp/virtual_link/www/si.musashi-tech.ac.jp/www/DOS_command/page08.htm
とか、
http://www.adminweb.jp/command/redirect/index4.html
とかが、今見たらわかるけど、なんでわからなかったんだ。。。

Windowsのcmdの画面で、
>pygmentize -f html -l python
と書いてEnterすると、入力待ちになる。
入力待ちで入力した入力の事を、標準入力という。

その結果、勝手に出てくる出力の事を、標準出力という。
入力待ちの状態から、元の状態に戻る方法は、ctrl+Cとか、Ctrl+Breakだと思い込んでいた。
違った。
上の二つでは、出力は出てこない。
Ctrl+Zっていうのは、存在は知っていたものの、なぜか効かなかったのでやっていなかったのだった。
今回の場合、改行してCtrl+Z後、Enterキーで、標準入力の入力を終了してくれた。

ubuntuはCtrl+Dで出力してくれた。2手間
Windowsでは、改行→Ctrl+Z→Enter 4手間

これをもう少しキレイにまとめて、Qiitaに書く。
いわゆる二重投稿ですな。
まあ、だれも困らんし、いいでしょうという、軽い気持ちだった...
posted by yuchan at 07:00 | Comment(0) | python

20160926

pythonで二通りある、%の使い道。連番ファイルの出力に使ったり、割り算の余りを計算したりする。

タグ:STR 連番 % Qiita
Qiitaに書こうと思ったら、既に載っていたので、こっちに書く。
http://qiita.com/ayumi0513/items/cc492db68d6d342e59f1
スタックオーバーフローにもあった。英語のお勉強になりますね。
http://stackoverflow.com/questions/961344/what-does-the-percentage-sign-mean-in-python-3-1

pythonで%が出てくる時
1 文字列の中(とすぐ外)に入ってる。(文字列フォーマットの指定のための%)
2 if条件式の中にたまにある。(余りを求めるための演算子の%。剰余演算、モジュロオペレーションModulo operation)

モジュロなんて、初めて聞いたよ。。。
余りといったら、リマインダー(remainder)だよ。
日本語でも、"余り"じゃなくて、"剰余"って難しく言い換えられるし、、、
いや、まったく別物なのかもしれない。面倒くさいので調べないけど。



1の、文字列の中(とすぐ外)に入ってる時は、C言語のprintf的な使い方。

yen = 102.5
"1 $ is %f"%yen#'102.500000'

文字列を、0で埋める時とかに使う。ファイル名は、文字列で指定するはずなので、ここにコレを応用すれば、連番ファイルが出力できる。

文字列で、1.txt〜9999.txtまで出力したい時がある。
よくある
1.txt
10.txt
100.txt
1000.txt
2.txt
.
.
.
となってしまう。

1.txt
2.txt
3.txt



と連番になってくれない。
0で埋めたいので、

a = 10
for i in xrange(a):
print("%02.f.txt"%i)

00.txt
01.txt
02.txt
03.txt
04.txt
05.txt
06.txt
07.txt
08.txt
09.txt

2の、if条件式の中にたまにあるやつは、余りを求めるための演算子としての%。剰余演算、モジュロオペレーションModulo operationとか呼ばれたりする。

>>> 100 / 11
9
>>> 100 % 11
1

あえて英語で、100 divided by 11 is nine, with a remainder of one.
 , 入れるんですね。

2は、具体的には、偶数(even number)か奇数(odd number)か判別するために使った。

(条件)2で割って、余りが0じゃなければ、、、
(命令)奇数と表示。
みたいな。

a = [0,1,2,3,4,5,6,7,8,9,10,11]
for i in xrange(len(a)):
if a[i]%2.0 != 0:
print("%d is Odd number"%a[i])
else:
print("%d is Even number"%a[i])

0は偶数ではないかもしれませんが、本によるらしいのですが、一応書き直してみたのですが。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q136531888

a = [0,1,2,3,4,5,6,7,8,9,10,11]
for i in xrange(len(a)):
if a[i] == 0:
print("%d is zero"%a[i])
elif a[i]%2.0 != 0:
print("%d is Odd number"%a[i])
else:
print("%d is Even number"%a[i])
タグ:STR 連番 % Qiita
posted by yuchan at 07:00 | Comment(0) | python

20160821

Pythonで.wavファイルを出力(標準のwaveとscipy.io.wavfileの速度比較)

タイトルの通り、速度を比較した。
中に入れるデータの作成も含めた時間を計測したら、圧倒的にscipyの方が有利になった。

また、詰まって、一日潰してしまった。
本当なら、ちゃっちゃと終わっちゃうはずだったのに。
http://www.non-fiction.jp/2015/08/17/sin_wave/とか、
Qiitaとかスタックオーバーフローが役に立ったけど、自分のやりたい事が直接載っていたわけではなかったので、かなり苦労した。
中に入れるデータ型が、かなり面倒だった。



numpy arrayで作ったデータを、wavファイルにする。
wavのフォーマットは、pcmのint16。
http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.write.html

中に入れるデータ型が、かなりの曲者だった。

waveは、標準ライブラリなので、何もしないでもpython上で使用できるけれど、中に入れるデータの型が難しかった。(int16のnumpy arrayを入れると曲の長さが半分になるのは、もしかして自分だけだろうか?)
np.sin →x = dtype int16にする。(ここまではscipyと共通) → np.reshape()の引数に、order='F'を入れて、RL交互に入れる → struct(要import struct)で、pythonの整数型を、Cで言うshortに変換。大変。
ただ、ここまですれば、scipyのやつと、同じサイズのファイルが作れる。
途中をサボると、高低が変わった音とか、ノイズがでたりとか、音は出るけど、scipyの数十倍のファイルサイズだったりとかになる。

scipyの方は、int16のnumpy arrayをそのままぶち込んでも全く平気。
scipyは、標準ライブラリではないけど、入れるよね?
numpy, scipy, matplotlib(自分は入れないがpandas)は、絶対入れるよね?
int16でなくても、−1〜+1のfloatでも読んだ。(ただし、この状態だとpcmでないため、Soundenfginefreeで読んでくれない模様。)
integerにせずstringで入れてしまうと、
・ファイルサイズが大きくなったりする、
・wavのフォーマットがPCM対応でなくなる。(なぜかは不明)



import numpy as np
import time
import wave as wv
import struct

stop = 60
Srate = 44100
frq = 1000
rad = np.linspace(0, 2 * np.pi * frq * stop, Srate * stop)

filename = str(frq) +"Hz-frequency_" + str(Srate) + "Hz-Srate_"+ str(stop) +"seconds-duration_sin-1.wav"



t = time.clock()

y1 = np.sin(rad) * 0.5
int16amp=32768
y2 = np.array([y1 * int16amp],dtype = "int16")[0]
y3 = np.reshape([y2,y2],len(y2)*2,order='F')
y4 = struct.pack("h" * len(y3), *y3)

w = wv.Wave_write(filename)
w.setparams((
2, # channel
2, # byte width
44100, # sampling rate
len(y4), # number of frames
"NONE", "NONE" # no compression
))
w.writeframesraw(y4)
w.close()
print("wave.Wave_write.write: time" + str(time.clock() - t))









import numpy as np
import scipy.io.wavfile as siw
import time
import struct


stop = 60
Srate = 44100
frq = 1000
rad = np.linspace(0, 2 * np.pi * frq * stop, Srate * stop)

filename = str(frq) +"Hz-frequency_" + str(Srate) + "Hz-Srate_"+ str(stop) +"seconds-duration_sin-1.wav"


t = time.clock()

y1 = np.sin(rad) * 0.5

int16amp=32768
y2 = np.array([y1 * int16amp],dtype = "int16")[0]
y3 =np.array(np.c_[y2, y2])

siw.write("1"+filename, Srate, y3)

print("scipy.io.wavfile.write: time" + str(time.clock() - t))

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

20160803

matplotlibで、よく使われるプロパティ?引き数?の名前loc

タグ:Matplotlib
matplotlibで
loc=
って引き数が出てくることが多い。

plt.legend()(matplotlib.pyplot.legend)の場合は、ここを参照
http://matplotlib.org/api/pyplot_api.html?highlight=dash#matplotlib.pyplot.legend
loc=
2−1
| |
3ー4


5番以降は、絶対使わないと思うので、書きっぱなし。
右 5
中寄りの左 6
中寄りの右 7
中央下 8
中央上 9
中央 10

凡例が中央って、どんだけ凡例主張してんだよ。。。
もうそうなったら凡例がグラフの主体じゃん。

最近使った珍しいのでは、mark_insetというやつで、
zoom inっぽく見せるために、図中の特定の位置にあるスコープの角と、同じインセットの角を線で結ぶ際、どの角を結ぶかを、locで指定していた。

loc
2−1
| |
3ー4

何で右上からぐるぐる回すの。
分かりにくいような、一度覚えたら忘れないような。
タグ:Matplotlib
posted by yuchan at 07:00 | Comment(0) | python

20160727

python ifで何もしないときpass

多分これ、基本中の基本だと思うけど、知らなかった。

if i == 0:
pass
else:
a = a + 1

何かif分の所に、何も処理したくないので、何も入れないと、「エラーが出るなぁ」とは気づいていた。
適当に a=1とか入れてた。
ちゃんとあった。
ググろう!
ググ郎!
posted by yuchan at 07:00 | Comment(0) | python

20160726

matplotlibで、could not allocate memoryが出たときの解決法

matplotlibで、プロットのアニメを作っていたら、遭遇したエラーの解決策。

could not allocate memory
と出てきたので、matplotlibの部分を、
plt.clf()

plt.close(f)
と書き換えたらエラーなく出来た。

プロットがちょっとづつ動くアニメを作るのが好きで、よくやる。
pythonを使うので、matplotlibという有名なライブラリ(もしくはpyqtgraph)で、作図をする。matplotlibのsavefigを使って、一コマずつグラフを作る。

import numpy as np
import matplotlib.pyplot as plt

number = 101

x = np.linspace(0, 2 * np.pi, number)
y = np.sin(x)


for i in range(len(x)):
plt.plot(x[0:i],y[0:i])
plt.savefig(str(i)+".png")


で気づくと思うが、毎回色が変わっている。
前回プロットしたグラフの上に、新しいプロットを重ねて描いているので、自動的に色をかき分けているから、色が勝手に変わる。

plt.plot(x[0,i], y[0,i], "k")
とでも書けば、色が固定されるのだろうけど、前回のプロットは当然消えないばかりか、蓄積されていく一方。
消す方がいいと思う。

と言う訳で、今まで自分は
plt.clf()
を使用してきた。
これは、savefigの下の行に書くだけで、グラフを消してくれる。

ただ、↑には良くない点があった。
そのせいで、ちょっと時間を食ったので、これを書いている。

2分以上のグラフを作ることになった時の事である。
2×60×10=1200 枚ほどのイメージデータを作ろうとしていたところ、下記のエラーが発生。

could not allocate memory

画像の書き出しが、停まってしまった。
タスクマネージャーでメモリの使用状況を観察していると(たまたま、windows上でやっていた)、動いている最中にどんどん使用メモリが増えていく。
なんで?やめて。

今までこういう訳の分からないPCの内部事情的なエラーが起こったら、面倒だからfor構文をちょこちょこ書き直してた。
今回も、それで良かったんだけれども、これからも頻繁にプロットアニメを作っていきたいし、もっと長編大作も作る所存である事に気づいてしまった自分にとっては、避けては通れないエラーなのかなと急に思いたち、、、

stackobverflowを調べた。というよりググった。
メモリを喰う作業なんて、作図しかしていないから。
消したつもりのグラフが消えていないんだろうと思った。

「matplotlib could not allocate memory」
とかして調べた。
携帯から調べたので、どのページを見たか書いてませんが、stackoverflowでした。
ちゃんと調べた。
http://stackoverflow.com/questions/8213522/matplotlib-clearing-a-plot-when-to-use-cla-clf-or-close
12番のヒトが書いていたけど、「plt.close()だと、どういうわけだかメモリーが蓄積されないから、ベターだよ」的なことが書いてある。

plt.clfの部分plt.close()としたら、実際に停まらずにできた。

本題から内容がそれるが、
windowsのムービーメーカーというソフトで、アニメを作る。
29fpsか、30fpsが標準的な動画なので、一コマあたり0.033秒とかにしたいところだけど、そんなに早く一枚を更新すると、絵がにじんだ様に見える箇所が出てきて汚い。
一コマあたり、0.1秒にすれば、そんな心配がなくなったので、いつも10fpsになっている。
posted by yuchan at 18:00 | Comment(0) | python

20160715

subplot2grid

matplotlibを使って、更に詳細にグラフを分割すり為にsubplot2gridを使う。


最初の引数(n,m)
グラフを横n・縦m分割

二番目の引数(i,j)
各セルの位置
インデックス指定なので、1〜4→0〜3になる。
i>> import matplotlib.pyplot as plt
>>> plt.subplot2grid((4,4),(0,0),colspan=2)

>>> plt.subplot2grid((3,3),(0,2),rowspan=3)

>>> plt.show()

figure_1.png

コレは便利。
なぜならば、2/3の幅をとるグラフが描けるからだ。
subplotでは、1/nはできても、それ以外はできなかった(と思う)。

http://matplotlib.org/users/gridspec.html
が元ネタ。

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