タグ

ブックマーク / handasse.blogspot.com (8)

  • matplotlibによる線種や色などの指定方法

    matplotlibの線の色、線種、線幅の指定方法を記しておく。 線の色はplot上で、青なら"b"、緑なら"g"のように指定する。ここでは、白い線を見せるために背景を灰色にしている。 以下、図の作成に使ったソースコード。 from pylab import * axes(axisbg="#777777") # 背景を灰色に. x = arange(-20, 20, 0.3) plot(x+1, x, "b") # 青. plot(x+2, x, "g") # 緑. plot(x+3, x, "r") # 赤. plot(x+4, x, "c") # シアン. plot(x+5, x, "m") # マゼンタ. plot(x+6, x, "y") # 黄. plot(x+7, x, "k") # 黒. plot(x+8, x, "w") # 白. plot(x+9, x, color="#

    matplotlibによる線種や色などの指定方法
  • C/C++でポインタによる多次元配列を連続したメモリ領域に作成する

    下記のようにC/C++の配列で多次元配列を作れば連続したメモリ領域となるが、動的に大きさを変えられないし、関数に渡したりするのも大変だ。 int a[N][M]; 一方、ポインタを使った下記の方法だと確保したメモリ領域が不連続となる。 int **a = new int*[N]; for (int i = 0; i < N; i++) a[i] = new int[M]; 動的にメモリ確保して連続したメモリ領域にしたい場合、以下のようにすれば良い。 int **a = new int*[N]; a[0] = new int[N * M]; for (int i = 1; i < N; i++) a[i] = a[0] + i * M; ここで、a[i][j] と (*a)[i*M+j] は同じ値を示す。 二次元配列、三次元配列を扱った実際のコード(C/C++)を最後に載せておく。 Cバージ

  • Python: 画像で与えられた迷路に対し2点間の最短経路を求める

    迷路の描かれた画像に対して、ピクセルの座標で指定したスタート地点とゴール地点の最短経路を求めるプログラムをPython+PILで書いてみた。使用する画像は、デジカメで撮ったものでも、ウェブから拾ってきたものでも、ペイントソフトで自作したものでも構わない。 まずは使用例を見て欲しい。この画像は携帯カメラで撮った自作の簡単な迷路だ(画像上)。それに対して指定した2点間の最短経路を赤線で示してみた(画像下)。ピクセル単位で計測しているので赤線が若干ガタガタしていて完全な最短経路ではないがほぼ最短と考えていいだろう。迷路画像(画像上)をmaze01.jpgとし、スタート地点の座標が(240, 160)、ゴール地点の座標が(210, 400)の場合、コマンドラインで以下のように実行する。 maze_solver.py maze01.jpg -s 240 160 -g 210 400 これで最短経路を

    Python: 画像で与えられた迷路に対し2点間の最短経路を求める
  • C++: 編集距離を求めるアルゴリズム

    編集距離(edit distance)とは二つの文字列がどの程度異なっているかを示す数値であり、レーベンシュタイン距離(Levenshtein distance)を指すことが多い。文字の挿入、削除、置換それぞれを一つの操作として必要な操作の最小数を求めるものだ。例えば、kittenとsittingの編集距離を求める場合、下記のように3回の操作でkittenをsittingに変更できるので編集距離は3となる。 1. sitten (k を s に置換) 2. sittin (e を i に置換) 3. sitting (g を挿入) そこで今回は編集距離を求める複数のアルゴリズムについてC++で実装してみた。 動的計画法 編集距離を求めるもっとも一般的なアルゴリズムは、動的計画法(dynamic programming)だろう。計算時間はO(mn)であり、手軽だ。C++で書いたコードを下に示

  • C++による数値・文字列の変換

    C++ではsstreamを使うことで、数値から文字列、文字列から数値への変換を行うことができる。 #include <iostream> #include <sstream> using namespace std; int main() { stringstream ss; double pi; // 文字列から数値に変換. ss << "3.14"; ss >> pi; cout << showpoint << pi << endl; ss.clear(); // 状態をクリア. ss.str(""); // 文字列をクリア. // 数値から文字列に変換. ss << 123 << "NUMBER"; cout << ss.str() << endl; return 0; } 3.14000 123NUMBER

  • Google Waveを使わないと人生損する

    Google Waveを使わないと人生損する」…これはちょっと大げさかもしれないが、1年半前に書いたブログ記事「Evernoteを使わないと人生損する」で言及したEvernoteと同じぐらい、Google Waveが重要な技術になると感じたのは当だ。当初、Google Waveは自分にとって、Google App Engine (GAE)などでプログラミングできる単なるおもちゃだった。しかしながら、今になってやっと、オンラインコラボレーションプラットフォームであるGoogle Waveの潜在能力の高さを知ることになった。 大量のメールに埋もれる情報と予定の立たないミーティング 最近、仕事上のメールのやりとりが頻繁ですぐに流されてしまうことが多く、大事な知らせを失念してしまったり、大量のメールから目的の情報を探し出さなくてはならなくなったりと、メールの扱いに手を焼いていた。さらに、直接顔

    Google Waveを使わないと人生損する
  • Google Wave: 「てめーはおれを怒らせた」ボットを作ってみた

    「てめーはおれを怒らせた」ボットといきなり言われても何のことだか分からないと思うけど、要はユーザの発言に含まれる特定の文字に反応して動作するGoogle Waveのボット billowlet@appspot.com を作成したのだ。 追記(2010/3/7): Google Wave Robots API v2がリリースされたので、新しいAPIでボットを書き直してみた。古いAPIは今後使用できなくなるようなので、今のうちに新しいAPIに移行した方が良いと思う。 先日、Google Waveの開発者用アカウントをGoogleからもらえたので早速何か作ってみることにした。どうせならGoogle App Engineを利用したかったので簡単に作れそうなボット(bot)を作成してみたわけだ。因みに元ネタのジョジョの奇妙な冒険とは言い回しが似ているというだけで内容とは関係ないので悪しからず。 このボ

    Google Wave: 「てめーはおれを怒らせた」ボットを作ってみた
  • Google App Engine: mixi OpenIDで認証する

    mixiがOpenIDに対応したということで早速Google App Engineで実装してみた。以前のエントリで紹介したがGoogle App Engineのサンプル集にOpenID ConsumerというWebアプリがあるので、そのソースコードを利用させてもらった。 しかし、実際に使ってみればわかるのだがこのコードにはいくつかのバグ(とGoogle App Engineの制限)があってちゃんと動かない。下記のリンク先は正常に動くように修正したものだ。 mixi OpenID テスト 以下にバグの箇所とその修正コードを示す。 consumer.py 344-345行目の以下のコードを self.response.set_status(302) self.response.headers['Location'] = redirect_url 以下のように修正する。 self.respons

  • 1