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オプションを…

tcl/tk

GUIは使わないのですぐ忘れる.tkを使う最低限のメモをまとめておく. tclメモ データは全て文字列として扱われる.数値の場合は読み込まれてから数値に自動で変換される. 行単位のプログラミング言語で,先頭の文字列がコマンド(butonとか) 変数はsetで値…

C/C++のライブラリについて

概要 静的ライブラリ,動的ライブラリ(そんなものは無い.それは一般的には共有ライブラリ),共有ライブラリ,静的リンク,動的リンクなど,分かっているようで理解が曖昧な点を整理しておく. C++ではヘッダファイルだけで提供するライブラリがある.ヘッダ…

common lispプログラミング

Common lispの勉強をしていて出会ったことを書き連ねていく. コーディングスタイル 詳細を知りたい場合はGoogle Common lisp Coding規約を読む. ファイル名はhoge-foo.lispという感じでハイフンでつなぐ。 グローバル変数は"hoge" 定数は+hoge+ 大文字と小…

インデックスのセットの要素をリストから除去する

c++

C++の場合 リストvがあって,そのリストから除去したいインデックスの集合remove_id_set(3,5,2)とかで指定する要素番号の要素を除去したい.eraseすると要素番号が一つずれるので,それも考慮して一旦集合をソートして,前から順に削除していくという方法. …

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 コンパイル方法 色々な…

c++のスレッド

c++

メモ c++11からはスレッドが言語に取り込まれている. コンパイルには-pthreadを付ける. スレッドを一時的に止めるときにはsleepではなく,スレッド用のstd::this_thread::thread_for()を使う. thread::join()をちゃんと実行して対象のスレッドの終了を待…

情報量関連のメモ

概要 機械学習とか統計を勉強していると情報量とかエントロピーの話が出てきていつも復習をし直しているので,纏めておく. 情報量 事象Aが与えられた時に,その情報量って?というものに答える. 確率を使って考える.発生が稀な事象と,よくある事象があっ…

オブジェクトの配列

c++

概要 自分で作ったオブジェクトの配列を作りたいことはよくある.特に,vectorで管理したいことはよくある.その時に,不要なコピーコンストラクタを呼ばないようにc++11以降ではpush_backの代わりにemplace_backを使う. emplace_backの引数はコンストラク…

Euler Projecect 1

100以下の整数のうち,3か5の倍数の和. Ruby 最もシンプルにただ全部舐めていくだけ. sum = 0 100.times do |i| if i%3==0 or i%5==0 sum += i end end p sum

Emacsの設定

パッケージ管理 package.elではなく,caskかEl-docというので管理するのが主流らしい. caskを使ってみる. インストール $ curl -fsSkL https://raw.github.com/cask/cask/master/go | python # ubuntu $ brew install cask # OSX $ export PATH="/home/nob…

ODEのテンプレートプログラム

c++

ODEのテンプレートプログラムで流れを確認しておく. ヘッダや宣言 dobuleとfloatの描画ルーチンを自動でコンパチにする宣言を入れておく. #include <iostream> #include <ode/ode.h> #include <drawstuff/drawstuff.h> // Doubleで扱う場合は描画ルーチンをD型にする. #ifdef dDOUBLE #define dsDrawBo</drawstuff/drawstuff.h></ode/ode.h></iostream>…

ランダムウォーク

お題 X軸上をランダムに動く点の軌跡を求める.1ステップで±1か,動かないか. python 一歩ずつやってもいいけど,ガバッと乱数作ってnumpyのcumsumを使う方法でもいい. import numpy as np move = np.random.randint(-1,2,100) # generate 100 random in…

C++プログラミングのメモ

Last update 16/07/25 概要 プログラミングをする上で,変数名の付け方とかprivate/publicの使い分けとかを勉強したことをまとめておく. 【C++API】 API化/OOPプログラミング 目的は実装を隠すことで,利用者に影響を与えずに内部を常に改変できるようにす…

c++よく忘れること

c++

概要 久しぶりにC++を書こうとすると(というよりも読もうとすると)忘れてしまっていてリハビリするのがコピーコンストラクタ,this, Template, 参照渡し,仮想関数, オーバライド,スマートポインタ. コピーコンストラクタと代入演算子のオーバーロード C…

Common lispの開発環境

動機 遺伝的プログラミングの勉強をしているとLispの例が多いから.人工知能系の研究で従来から使われている理由(Cに比べての高級性)は最近の言語には劣るから意味ないと言われてもいるようだけど,少し本を読んだ限りでは高級性以外の関数型であること,…

ディレクトリ内のあるファイル群に処理を適用する

お題 あるディレクトリ配下のあるファイル群(例えば拡張子がrbのファイルに対してなど)に何か処理を適用する場合.スクリプトを書くときに良くあるのかな. Ruby Dir::glob("/home/nobunaga/codes/*.rb").each do |f| func(f) end python pythonもほぼ同様…

順列の作成

お題 N個の配列からM個の並びを全て列挙する.所謂縦列. python itertoolsを使う.自分で何もやっていないけど,pythonを使う意味はそこだから別に気にしない. import itertools if __name__ == "__main__": a = [0,1,2,3,4,5,6,7,8,9] for p in itertools…

ルーレット選択

お題 GAとかで使うルーレット選択を書く.いわゆる重み付きランダム選択.重みWがx:y:z=1:2:3の場合,x=1/6, y=2/6, z=3/6の確率で生成する.色んな言語で累積和,2分探索,乱数を扱う良い練習問題なのかな. python やり方としては重みの累積和の配列を作…

クロージャ with Python

目的 クロージャの使いドコロがいまいち分からないけれど,動作が(設定パラメタなどで)異なる関数を生成する,という目的で使うのかな?他にはクラス変数っぽい役割で使っているような例があるけどどんな意味があるのか良くわからなかった. 補足説明 pyth…

pythonでのスレッド

基本事項 pythonのthreadは複数コアに跨がらないので,CPU空き時間がないような並列化では意味が無い.そのような場合にはmultiprocessingモジュールを使う. threadingモジュールを使って、threading.Threadのサブクラスを作るか、インスタンスを作る,の2…

DEAPのメモ

概要 拡張性を最も意識している。データ構造もアルゴリズムもほとんどがカスタマイズ可能。 問題や遺伝子の型を扱う、creator, 遺伝子操作を扱うtoolboxが中心モジュール。 インストール 描画用にvpythonも入れておく(pipでコケる場合は面倒なのでaptで入れ…

Gazebo memo

worldファイルにモデル、センサなどすべての要素が記載される。フォーマットはSDF。 model(ODEの剛体と幾何両方含むもの)もSDFで定義される。worldファイルからインクルードする。 gzserver <world_file>でシミュレーションを実行する。 GUIツールとしてgzclientが使える</world_file>…

vpythonのメモ

インストール pip版はエラーでうまく使えなかった.aptでインストールする. $ sudo apt-get install python-visual メモ 座標系は右手系(xは→,yは↑,zは手前方向)(ODEも右手系なので悩む必要はない) 右マウスぐりぐりで回転.両方押しでスパン. cylin…

遺伝的アルゴリズムのメモ

基本 1975にHollandが提案. 最適化対象の関数の微分可能性や単峰性を要求しない(SAも同様). 但し,評価関数の順序性と,探索空間が位相を持っていることが要請される. 解の遺伝子表現方法を決めるということは,表現型と遺伝子型の符号化方法(コーディ…

ヒストグラムの階級幅の決め方

階級幅は基本的に等間隔.非等間隔だとどうしてもそこに恣意性が入る 階級幅の決め方は,まず,幅に関する自明な知見,例えば学年などがあるならそれを採用する. 次に,データから幅を決める場合,基本的には幅を決めるというよりはビン数を決める.データ…

pandas@python

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

scikit-learnのメモ

全体通して 多くの機械学習アルゴリズム(SVM, MLP, etc.)を統一したAPIで利用できる.つまり,多くの学習アルゴリズムが,モデルのオブジェクトを生成したら,fit(X,y)で学習して,predict(T)で予測する iris, digit, boston_house_priceなどの有名なサン…

Numpyのメモ

Numpyだけでも色々とメモが多いので別にする. よく忘れること scipyとの役割分担は?というのは,BLASとLAPACの関係.Numpyが基本的な線形代数演算(BLAS)で,それを使って科学技術計算(FFTとか)をするのがscipy(LAPACK). # ゼロ要素を除いたデータの和 d =…

NULL, NA, NaNの整理

基本事項 NULL, NA, NaNはそれぞれ意味が違う.NULLは無いこと(未定義),NAは使えないこと(Not Available,欠損値), NaNは数値でないこと(Not a Number,非数)だということを踏まえておく. 各言語での扱い R 全てあるので特に悩まない. 0/0はNaN. x = N…

scipy.spatial.Voronoiの使い方

問題設定 点群(points cloud)が与えられた時に,各点のボロノイ多面体の体積を求めたい. pythonの例 scipyにあるspatial.Voronoiを使うとボロノイ多面体を簡単に計算してくれる.spatial.VoronoiはQhullという凸解析ライブラリのラッパのようだ. 但し,spa…

pythonメモ

気持ち 個人的には,Rubyのほうがファイル,正規表現,文字列処理とかの良く使う部分が綺麗で,(パーサが強力なのか)直感的な書き方で大体使えるからRubyのほうが好き. だけど,色々と試すことのへのファーストステップの着手の早さが決めてな環境だと,…

ODEとpyODE

環境構築 ODEのインストール aptで入るODEは描画のdrawstuffが付いてこないのでソースからインストールする. PyODEはdrawstuffを使わない.別途,pyopengl, VPythonなどで描画する. drawstuff自体はmake installで入らないので,インクルードファイルとラ…

異常検知のメモ

異常検知というよりは機械学習の基礎題材として勉強中.少しずつ追記していこう. 参考文献 日本語だと異常検知だけを扱った本として以下の3冊があるみたい. * 山西, "データマイニングによる異常検知", 2009. * 井手, "入門機械学習による異常検知", コロ…

MCMC

MCMCはマルコフ連鎖の定常状態が目的の確率分布になるように,マルコフ連鎖を設計して,そのマルコフ連鎖からモンテカルロ的にサンプリングする,っているイメージ.目的とか用語を1つずつ整理しよう. マルコフ連鎖 マルコフ〇〇というのはたくさんあってい…

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

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

RandomForest@scikit-learn

注意点 データは内部でnp.float32に変換されている.np.info(np.float32)で確認すると3.4e+38程度であふれることがわかる. スパース行列には対応していないので,TruncatedSVDなどの次元圧縮と併用する. xの与え方は[x1, x2, x3, ...]のようにリストで渡す…

git/githubメモ

###githubというよりもgitのメモ用語 remoteリポジトリ:サーバ上(githubならgithub)のファイル保管場所 local リポジトリ:ローカルのファイル保管場所 push :ローカルリポジトリのコミット状態をリモートリポジトリに反映 pull :リモートリポジトリか…

ニューラルネットワーク+深層学習

# ニューラルネット - 順方向ニューラルネットっていう一般的な構成は,オンライン型の関数回帰方法で,特に非線形関数の合成関数として回帰するものだと思う. - 3層でN層以上と等価な関数表現力があると言われているらしいが,じゃあ何で深層学習と呼ばれ…