pythonでのログ(logging)

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

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

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

pythonのパッケージとimport

パッケージの構成 リポジトリ名とパッケージ名は同じになる(ことが多い)。パッケージは小文字で、アンダースコアも(なるべく)使わず。モジュールは小文字でスネーク。(クラスはキャメルケース) 基本的にはtestはpackageの各ディレクトリ、ファイルと対応する…

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

塗り絵生成 先日のお絵かきロジック生成の時に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とかの返り値がジェネレータになっているので、その計測を間違っている例とかがウェブには多い。) 高速化の前に計測が必須だが,計測に関しては別のま…

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

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

ubuntuメモ

最低限のインストール $ sudo apt-get install emacs g++ gcc make cmake sbcl gauche python3-pip CtrlとCapLockのスワップ caps-ctrlのスワップはgnome-tweak-toolでやれる。 $ sudo apt-get install gnome-tweak-tool 日本語環境 Ubuntuでは一時fcitxにな…

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に直接…

SOFT SKILLSの自分メモ

学習すること ソフトウェアエンジニアは絶えず勉強が必要で(SEに限らずだけれど)、効率的な勉強法が重要となる。 効率よい学習とは、好奇心を持って行動を起こすこと。そして人に教えると知識が補強される。 だから、まず最速で試すポイントまで立つことを意…

Pythonの開発環境 on Emacs

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

Cmakeのメモ

使い方 CMakeList.txtにMakefileの生成ルールを記述. CMakeLists.txtを用意したディレクトリを指定してcmakeを実行するとMakefileが生成される.後は通常通りにmakeでコンパイル. ただし,cmakeするとCMakeCache.txtやら色々できてディレクトリが汚れるの…

コンテナからの要素削除

c++

ひさしぶりに書くとこんな事も忘れてしまっていた.下記のコードでセグメンテーションフォールトが出た. でも,そもそもremove_ifをこんな時には使うようだ. std::list<int> lis {0,1,2,3,4,5,6,7,8,9}; for (auto itr=lis.begin(); itr!=lis.end(); ++itr) { i</int>…

ポリモルフィズム

c++

目的 オブジェクトによって振る舞いを変える. 方法 子クラスのポインタを親クラスのポインタに代入するのがミソ.(子クラスは親クラスのポインタに代入可能.逆はだめ.) それを使う側は親クラスのポインタを引数なりにして受け取って,親クラスのメソッド…

テンプレートのメモ

c++

基本 型推論 関数テンプレートの場合は型推論されるので,実体化の際に明示的に型を書かなくても良い. クラステンプレートの場合には推論されないので注意. 特殊化 テンプレート関数,テンプレートクラスがある時に特定の型でだけ別の動きをしたい場合には…

二分探索 バイナリサーチ

簡単でかつ効果が高いのでよく使うサーチ. 意外と境界条件でバグりがち.味噌は,右側を配列の外において置く. #include<iostream> #include<vector> using namespace std; int main() { int d, n; cin >> d; cin >> n; vector<int> v(n); for (int i=0; i<n; ++i) cin>>v[i]; int l=0, r=v.siz</n;></int></vector></iostream>…

線形探索と番兵アルゴリズム

番兵アルゴリズムはただの書き方の問題だと思ってたけど,高速化のテクニックだった,という話. forでvectorの要素を回す時に,毎回比較演算が行われるけど,それが勿体無いという場合に,絶対に止まるよに番兵を置いておいて無限ループで回すというのが番…

プロコンと標準入出力

c++

プロコンをかじってみたら,標準入出力で躓いた...ということで,使い方を整理しておく. scanf 空白文字または改行文字を区切りとして,フォーマットに従って変換して変数に取り込む.2つ以上フォーマット指定子を指定すれば一度にその分だけ読み進む.…

C++ファイル分割

c++

またまた久しぶりにC++を書こうとすると,ヘッダファイル,ファイル分割を忘れてしまっていたので,整理. 全般 共通にするものをヘッダに書く(当たり前だけど). 宣言と定義の違いを持つこと.宣言は名前だけ.定義は実態を生成する文. 定義は(普通)は…

実行中プロセスのREPLに接続

メモ 長いシミュレーションなどをサーバ上でプロセスを実行させたまま帰って,あとでミスに気づいて関数を変更したい,などという状況. swankというのがSlimeの機能なのかEmacsの機能なのかSBCL(CL)の機能なのかが良く分からないけど,イメージとしては,SB…

Ltkのメモ

書きかけ 雑記 with-ltkはwishの起動やmainloopの呼び出しとか全部やってくれるマクロ.基本的にltkのプログラミングではこれで全体を囲む.マニュアルでやりたいなら,(start-wish), (mainloop)を実行する. ウィジットのmasterオプションは親ウィジットの…

sbclでスクリプト

実行方法 RubyとかPerlみたいにファイルの先頭に#!/usr/bin/sbcl --scriptを付けて,実行権限を与えてシェルから実行.#!xxxはシェバンっていうらしい.sbcl 1.0.22から使えるようになった..ただし,~/.sbclrcを読み込まないので注意. scriptオプションを…