python

TkinterによるPythonのGUIプログラミング

趣旨 たまに使おうとするとウェブを漁りまくることになるので,注意点だけまとめておく。 ドキュメント Tkinter Reference 8.5 キーの名前一覧 tkとttk テーマを設定すれば一括してウィジットの見た目を変更できるのがttk。 多くのウィジットが同名のウィジ…

MatplotlibのimshowでRGBデータを表示

imshowは2Dデータだけでなく,RGBデータを含む(H, W, CH)のデータを表示することができる。 その際に,floatかintかによって,値の範囲が異なるようだ(調べきれていないので自信が無いけど) float32のときは,[0,1]の実数値,int32などの整数値のときは[0,2…

Pythonのパッケージ構成とimport文

パッケージについて PyPIとかへの登録とかはおいておいて,自作パッケージをimportしたり,他のプログラムから使おうとするときの方法を整理しておく。下記に従えば,最悪,mypackage以下を開発中のパッケージにコピーすれば,そのまま使える。 ディレクトリ…

gifアニメーション(convert)

やりたいこと 評価結果などをアニメーション表示したい時がある。リアルタイムなグラフのプロットならGnuplotでも良いけれど,ゲームプレイ画像などを表示したい場合には画像からアニメーションを作れると良い。 方法 "連番"の画像ファイルを用意する。注意…

機械学習の前処理でのデータの正規化/標準化

前処理の目的 体重と身長など複数の異なる特徴量を生で扱ってしまうと、出力に対して使いやすい(大まかにFitしやすい)方を優先してしまう問題がある。 内容 問題解決の単純な方法は異なるカテゴリのデータを同じ範囲のデータに変換する。 変換は入力だけでな…

ArgparserとConfigparser

Deep Learning関連のプログラムを試していると、やたらと設定パラメタが多い。 これまではargparseを使ってきたけど、コードが煩雑になるのでconfigファイルの扱い方を調べてみた。 argparse まずはargparseの基本的な使い方。 import argparse parser = arg…

pythonでのログ(logging)

ロガーは名前で管理される。逆に、同じ名前のロガーは同じものとして扱われる。 それを利用するために、モジュール側ではモジュール名(name)をロガーの名前にしておいて、ユーザ側はモジュールの名前を指定することで当該のロガーを取得して、個別に設定する…

Pythonでのインターフェイス(ABCモジュール)

pythonでインターフェイスのようなことをやりたい場合にはABCモジュールというのが使えるようだ。 でも、あんまり使っている印象はなく、raise NotImplementedErrorで簡易的に代用している場合が多いようだ。 ABCモジュールを使わない場合 簡易的にraise Not…

画像から塗り絵問題の生成(線画抽出)

塗り絵生成 先日のお絵かきロジック生成の時にPILの使い方を覚えた。 その中で、画像処理って使うのも単純で、アルゴリズムも単純なものが多いなぁ、という感想をもった。 例えば、2値化して、エッジ強調すれば塗り絵になるなぁ、すぐ出来そうだなぁ、みたい…

ヒートマップ

配列内のデータをRGBのヒートマップに変換したいことは良くあるのでメモ。 下の関数は配列内のデータの最大値(max_val), 最小値(min_val)とヒートマップ化したい値vを渡すと、そのvのRGBを返す。 def calc_heatmap_rgb(min_val, max_val, v, str_out=True): …

お絵かきロジック問題の生成

動機 前の日記でpythonでの画像の取り扱いをメモしたけど、そのモチベーションは画像からお絵かきロジックを生成したいと思ったから。というのも、最近一発描きというYoutuberさんのお絵かきロジック動画を見て癒やされていたから。一発描きさんは問題を自分…

Pythonでの画像処理の基本

画像形式の基礎知識 JPEGとかは圧縮されているとして、PNGとBMPの違いが分からなくなるのでメモ。 PNG(Portable Network Graphics) Webでのビットマップ画像を扱うために1996年に生まれた。GIFなどに対して後発なのでGIFなどで足りない機能が追加されている…

pythonでのCUIプログラミングTips

入力のTips inputで標準入力から文字を入力する場合に、カーソルキー(矢印キー)は扱いが特殊なので注意。環境依存になるが、入力されたカーソルキーをrepr付きで出力(print(repr(x)))してみると、各キーをASCIIコードでどう取得しているかわかる。 Linux(Ubu…

pythonの速度で気にするところ

高速化に関して 高速化はほんとに色々と罠が多い。意図した計測できていなかったり。(特に、python3はmapとかの返り値がジェネレータになっているので、その計測を間違っている例とかがウェブには多い。) 計測 まずは何よりも先に計測だ。Linuxのtimeコマン…

Pythonでのソケット(TCP)プログラミングのメモ

ソケットプログラミング(サーバ/クライアント) 簡単なゲームを作る時とか、pythonでプロセス間の通信をしたくなる。そんな時のテンプレート。 サーバ側でIPとホストを指定してソケットを生成、クライアントからの接続を待って、接続があれば処理、これを繰り…

matplotlibのメモ

覚えておく点 matplotlibの使い方をすぐ忘れる(特に、subplot)。この書き方にこだわる必要は無いけれど、要点だけまとめておく。 手順としては、figureを作る(大きなキャンバスを定義)、figureに対してadd_subplotでサブキャンバスを作る。これはaxesって言…

Kerasのバックエンドの使い方

勾配情報を取得したり、特定のレイヤの出力を得たい場合など、色々な場面でKerasプログラムの中でTensorflowレイヤの操作をしたいことが出てくる。そんな時に使うのがバックエンド。 多くはドキュメント見れば良いが、良く分からないAPI(functionとか)もある…

Kerasの処理テンプレート

メモ モデルのcompile時に与えるmetricsは、学習の各エポック毎に計算する学習の指標を表すもの。損失関数は何もやらなくても計算しているので、損失関数以外を指定する。自分で関数を作っても良いが、大概は用意されている。良くあるサンプルではaccuracyが…

Kerasで中間ノードの出力を確認する。

kerasのドキュメントのFAQに書かれているので、それ通りにやれば良い。一応、良くあるボストンの家の価格のデータの例を記載。 そう言えば、kerasが終了時にsessionのdelに失敗する場合がある。ちゃんと、backendのclear_session()を呼ぶ。 import numpy imp…

Keras with scikit-learnのメモ

KerasはTensorflow/Theanoを使って良くあるDeep Learningアルゴリズムのパタンを効率的に実装するライブラリだけど、機械学習と言えばデータ前処理やCross-Validation,パラメタ探索とか他にも共通してやることがたくさんある。そんな機械学習共通のライブラ…

メタプログラミング in python

PythonでもRubyみたいなメタプログラミング(method_missing, sendとか)が色々出来るみたい。 ちょっとずつ調べて書いていく。 モンキーパッチ(オープンクラスとは違う) 動的にメソッド定義できる(なんと!!)。オープンクラスというよりはクラスのattrに直接…

Pythonの開発環境 on Emacs

前提 Caskの使用をやめたので修正@2018/06/02 最低限として文法チェック、補完、REPLが使えれば良い。 ipython notebook(Jupyter)は使わない。 (notebookはやっぱり慣れないのと、別にmarkdownは別ファイルに書けば良いし、図もEmacs内に埋め込み表示しなく…

N以下の重複しない乱数(整数)の生成

C++ 良い方法かは分からないけどiotaやeraseを使った例を見つけたのでメモ.やり方は一旦iotaで[0,1,...max]の配列を作って,それをシャッフルして,eraseで必要ない部分を消す.eraseはイテレータを2つ渡すと,開始位置から終了位置の1つ前までを消去でき…

C/C++からPythonを使う

要旨 Pythonには色々な便利なライブラリがある.C/C++にも便利なライブラリがある.それらが重複しない場合は一方からもう一方を叩けると嬉しい. 参考URL 1. Embedding Python in Another Application — Python 3.5.2 documentation コンパイル方法 色々な…

pandas@python

概要 pandasというのをよく目にする.Rっぽくデータ処理するためのライブラリみたいだ. DataFrameに2次元配列を渡してデータを生成する.タプルの配列や,ハッシュ配列でも行ける. 行はindex, 列はcolumnsで名前を付ければ,名前でアクセス可能.行は意味…

pythonメモ

よく使うけど忘れること 改行 Pythonの一番なれない点としてインデントがブロックの意味を持つ点がある.勝手に改行したりすると意味が変わるので注意する.文の途中で改行したい時は"\"を文末に置く.ただし,(), {},[]中の","の後ろは"\"を省略可能. doc …

データ解析でまずやることのメモ

データ解析をする際に,いきなり回帰したりクラスタリングしたりしない.まずはデータを見ることが重要.これをささっとやれるようにするためのメモ.あまり好きではなかったpythonだけど,pandas, numpy, scipyなどなどに触れると便利だと気づく・・・悔し…