読者です 読者をやめる 読者になる 読者になる

Python

Bloom Filter を作ってみた

Bloom Filter を実装してみた。簡単な実装なので、速度や空間効率は悪いです。 Bloom Filter というのは、確率的データ構造の一つで、ある要素が集合に含まれるかどうかを試験するものです。空間効率が非常に良いのが利点で、偽陽性、つまり集合に含まれない…

inline_table ― ソースコードに ASCII テーブルを埋め込むための Python モジュール

inline_table という名前のソースコードに ASCII テーブルを埋め込むための Python モジュールを作ってみました。 GitHub - fjkz/inline_table: Python module for embedding text tables into source-code 以下のように reStructuredText で書かれたテーブ…

ttap: ファイルシステム階層によるテスティングフレームワーク

実行可能なテストスクリプト群のディレクトリ構成を定義して、整理するためのフレームワークを作りました。半年ほど前に作ってたやつです。*1塩漬け期間を経たのでリリースとします。 GitHub - fjkz/ttap: ttap: a testing framework with file system hiera…

graph-tool で遊ぶ1

複雑な世界のありようを理解するのに、「グラフ」の可視化だとか分析はすごく有用なのではと考え始めたので、グラフについて勉強してみる。 動くおもちゃがないと楽しくないので、いいのかどうか知らないが、検索して出てきた graph-tool というツールで可視…

TT-Runnerの記録2:ベータ版

前回: 構造化されたテストスクリプト群の実行ツール - 超ウィザード級ハッカーのたのしみ TT-Runner: テストスクリプトのディレクトリ構造フレームワーク - 超ウィザード級ハッカーのたのしみ TT-Runner の記録 1 - 超ウィザード級ハッカーのたのしみ GitHub…

TT-Runner の記録 1

TT-Runner: テストスクリプトのディレクトリ構造フレームワーク - 超ウィザード級ハッカーのたのしみ GitHub - fjkz/ttap: A Test Scripts Runner TT-Runner (Test scripTs Runner あるいは Tree Tests Runner) というのをシコシコと作っています。*1 以下、…

TT-Runner: テストスクリプトのディレクトリ構造フレームワーク

以前書いたテストツールがある程度できたので、公開する。TT-Runner と名付ける。 GitHub - fjkz/ttap: A Test Scripts Runner 結合テスト以降のユニットテストフレームワークがうまいこと使えなくて、スクリプトをだらだらと書いているような場合を想定した…

構造化されたテストスクリプト群の実行ツール

テストコードってどんどん増えていく。だらだらスクリプトを書くのは簡単だが、すぐに収拾が付かなくなり、経済的に耐えられないレベルで混乱してくる。何のテストをしているのかももちろんわからないが、動かし方も分からないし、どうなったらpassなのかも…

○×ゲームの神の一手を導いてみた

小さい頃にノートの隅や地面で良く遊んだ○×ゲームを計算機で解いてみた。 ○×ゲーム程度であれば、スクリプト言語を用いて、かつ枝刈りとかせずに終端までミニマックス法で全探索しても十分に解ける。ミニマックス法というのは、要するに負けない手を打てば勝…

KdV方程式を解いてみた

KdV方程式を数値的に解いてみた。*1 KdV方程式は、以下の式で表される方程式です。 非線形の偏微分方程式だけれども、手計算で頑張ることができて、よく研究されてきた方程式です。バーガース方程式と同様の非線形項に加えて、3回微分の項がある。この項は…

Jupyterはデータとか数式いじる人には最強のツールかもしれない

「Jupyter」という主にPythonのためのWebベースのシェルに感動した。 インストールと起動 Ubuntu14.04なら、 $ sudo apt-get install build-essential python3-dev $ sudo pip3 install jupyter でインストールできるはずです。 $ jupyter notebook と打つと…

ステップ数を測るツール

コードの行数を測るツールはいろいろあるが、diffで見ることが前提で数えるツールでいいのを知らなかったので手慰みに作った。 GitHub - fjkz/tloc: A trivial code line counter for diff. こんな感じでファイルごとに行数を出してくれる。 $ git diff | ./…

1m2s100msみたいな表示をミリ秒単位に

メモ 所要時間を3m10s48msみたいに表示するプログラムがいて(やめてほしい)、この値をミリ秒に変換したい。 こんな感じかな〜? (2015-03-09) ダメだったので直しました。正規表現は苦手だ #!/usr/bin/python """ Convert a time string like 1h2m3s4ms5us…

ニューラルネットワークで囲碁の終局を判定2

前回 ニューラルネットワークで囲碁の終局を判定 - 超ウィザード級ハッカーのたのしみ 何パターンか試してみた。 入力値は、終局図から黒石を取り除いたものと白石を取り除いたものを並べたものである。石がある点を1.0、石がない点を0.0としている。黒石が1…

PyBrainのテスト 2

PyBrainでbuildNetwork関数を使わずにネットワークをつくる方法. バイアスパラメータを入れるには,BiasUnitを作って各レイヤーにつなげる必要がある. 例によってXORを学習させる. from pybrain.datasets import SupervisedDataSet from pybrain.supervis…

囲碁の終局図から地を求める

ニューラルネットワークに囲碁を学習させようとしている.前回はとりあえずニューラルネットワークを使ってみるということをしてみた. 学習を始めるには,学習用のデータが必要となる.棋譜はSGFファイル形式でインターネットに転がっているが,人間の棋譜…

PyBrainのテスト

ちょっとニューラルネットワークで試したいことがあるので,最初の段階として,PyBrainを用いてニューラルネットワークというものを使用してみる. 階層型ニューラルネットワークの例題としてXOR演算を学習させる. 以下,コード from pybrain.datasets impo…

数学定数でブラウン運動 2 - 1億桁で計算

前回 数学定数でブラウン運動 - 超ウィザード級ハッカーのたのしみ 1億ステップでやってみた. Mathematical Constants - Millions of Digits から数学定数のデータはもらった. メルセンヌツイスター 2の平方根 3の平方根 自然対数の底 円周率 に加えて,…

数学定数でブラウン運動

擬似乱数を可視化するためにブラウン運動を計算している. 今回は,数学定数の各桁を外力としてみる. 数学定数のn桁目をdとしたときに,時間n-1からnまでに粒子に与える外力を (F_x, F_y) = (cos(2 * pi * d / 10), sin(2 * pi * d / 10) とする. 試した数…

ブラウン運動をシミュレーションしてみる

題名の通り.擬似乱数を可視化するために,ランジュバン方程式に基づくブラウン運動を計算してみた.*1 結果の絵. コードは以下. import math import random class Particle(object): ''' A particle moving in 2D space. ''' position_x = 0.0 position_y…

コマンド一発でWebサーバーを立ち上げる

小ネタを仕入れたのでメモ。 PythonのSimpleHTTPServerというモジュールを使用すると、一瞬でHTTPサーバーを立ち上げることができる。 python -m SimpleHTTPServer [Port, default=8000] とコマンドラインで打てばカレントディレクトリを公開するHTTPサーバ…

PyPyのしくみ(仮)

前回:PyPyを試してみた - 超ウィザード級ハッカーのたのしみ PyPyを試してみたら、爆速だった。この謎を解明すべく論文を読んでみた。あまり理解できないのだが、現状理解できたところまでメモする。頭が整理できていないので、まとまっていない。 PyPyは以…

PyPyを試してみた

PyPyというPythonの処理系があるそうな。これが速いらしいので、どんなものか試してみた。 インストールはPyPyのホームページからバイナリをダウンロードしてくるだけです。 [追記]Ubuntuだとapt-getで取れました。 試すのは毎度おなじみのたらい回し関数(…

Pythonで遅延評価

前回 、『ラムダ式で再帰関数を書く - 超ウィザード級ハッカーのたのしみ 』でラムダ式について、学んでいたらPythonで遅延評価をする方法が理解できた。 実験に使うのは、たらい回し関数だ。 普通のたらい回し関数は以下の通り。 def tarai(x, y, z): retur…

たらい回し関数をメモ化で高速化

前回『Pythonで遅延評価 - 超ウィザード級ハッカーのたのしみ』に引き続きたらい回し関数で遊んでみる。 今回は、メモ化(memoization)で高速化を試みる。 メモ化で高速化したたらい回し関数は以下のとおり。 memo = {} def memo_tarai(x, y, z): global memo…

ラムダ式で再帰関数を書く

Java8で導入されたと話題のラムダ式を勉強中。コーディングの観点からはただの無名関数以上の意味はないが、いろいろ深いみたい。 Pythonだと以下のように書く >>> add = lambda x, y: x + y >>> add(1, 2) 3 では、再帰関数はどうすればよいのだろう? 例え…

CとPythonの割り算の違い

『コンピュータは割り算が苦手』の記事で整数の除算演算も乗算・加減算に比べると遅いことを知った。『ハッカーの楽しみ』に普通に書いていた。整数除算について調べたら、もう一つ非常に基本的なことを知らないことを知った。負の整数を割ったときの値につ…

コンピュータは割り算が苦手

浮動小数点数演算では割り算は遅いからやっちゃだめというのは、数値計算の常識ですが、Pythonで実験してみよう。Pythonで数値計算なんてしねえよ、あるいは速度を考えなきゃならないことをさせないよ、とは思うが、Pythonのが楽なので。実行時間の計測にはt…