y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

PHP new generation のベンチマーク実行時間の計測

PHP new generation というのがアナウンスされていたので、試してみました。 php.internals: phpng:_Refactored_PHP_Engine_with_Big_Performance_I mprovementビルド、実行手順等は以下のウェブページに記載されています。 https://wiki.php.net/phpngHHVM…

Hack/HHVM 入門 (社内勉強会の発表資料)

勤務先の社内勉強会で Hack について紹介したので、その発表資料を公開します。 Hack/HHVM 入門 from y-uti

Hack のバイトコード命令を確認する

Hack のプログラムがどのようなバイトコードにコンパイルされるのか、以下の手順で確認できます。サンプルとして hello.hh を作成します。 $ cat hello.hh <inputs> Options: --help display this mes…</inputs>

Hack と PHP の実行速度の比較 - その2

前回に引き続き、Hack と PHP の実行速度を比較してみます。今回は、Computer Language Benchmarks Game に掲載されているコードを借りて、PHP と HHVM のそれぞれで実行時間を計測しました。Computer Language Benchmarks Game はプログラミング言語のベン…

Hack と PHP の実行速度の比較

Facebook によって開発されたプログラミング言語 Hack を試してみました。公式サイトはこちらです。 Hack まず、手元の環境に Hack をインストールします。今回は、新たに Ubuntu Server 13.10 の環境を作成してインストールすることにしました。下記のウェ…

D3.js の配列操作関数いろいろ

ウェブブラウザ上でのデータ可視化手法を身につけようと思って D3.js の勉強を始めたのですが、API マニュアルを眺めていたところ、さまざまな配列操作関数が提供されていることに気付きました。これらの関数を使うことで、より関数的なコードを書くことがで…

テンパズルを解く

先日、仕事帰りの電車の車内広告に、「9999 の数字から 10 を作ってみよう」という問題が載っていました。いわゆるテンパズルです。昔は電車の切符でよく遊んだものですが、Suica の導入で終わってしまいましたね。そんなわけで、懐かしく思ったので久しぶり…

Rand Index のデモ

先日、Rand Index によるクラスタリング間の距離の計算について記事を書きましたが、D3.js を使ったデモページを作成してみました。 Rand Index のデモ画面の左右に表示される二枚の日本地図は、それぞれ独立に k-means でクラスタリングして色分けされてい…

D3.js で日本地図を描く

D3.js と TopoJSON を使って、ブラウザ上に地図を描くことが簡単にできるようです。ウェブ上の解説記事を参考にしながら私も試してみました。作成にあたっては、主に下記ウェブページの解説を参考にしました。 D3.js と TopoJSON で地図を作るできあがりは以…

Rand index によるクラスタリング間の類似度の算出

データのクラスタリング間の類似度を測る尺度として、ランド指数 (Rand Index) というものがあるようです。プログラムを書きながら試してみたので、実例とともに計算方法をまとめてみたいと思います*1。なお Wikipedia の英語ページは以下にあります。日本語…

paizaオンラインハッカソンVol.1での商品数と価格存在確率の関係

以前、このブログで記事にした paizaオンラインハッカソンVol.1 について、他の方々がどのようなコードを書いているのかと google で探していたところ、なんと、キャンペーン設定価格をそのまま出力するプログラムが正解になるというブログがありました。 野…

SplDoublyLinkedList を LIFO で使うときの注意点

前回の記事の最後に書いたように、PHP の SplDoublyLinkedList を LIFO で使う場合には、いくつか注意しなければいけない挙動があります。一つ目は、イテレータのキーについてです。まずは FIFO の場合について、以下のようなコードで確認してみます。各要素…

SplDoublyLinkedList を利用したリスト操作

このエントリの内容が興味深かったので、PHP で SplDoublyLinkedList を使って書いてみました。 Python - すごく簡単なアルゴリズムがphpで書けなくてつらい - Qiita [キータ] PHPでは配列ではなくオブジェクトに状態を持たせよ - なんたらノート第三期ベー…

Particle filter のリサンプリング方法の比較

Particle filter のリサンプリング方法を比較した下記の論文を読んでみました。そこで、論文中で比較されていた各手法を PHP で実装して試してみたいと思います。 Randal Douc, Olivier Cappé, and Eric Moulines. Comparison of resampling schemes for par…

各言語でのバイトコード命令表示方法

普段あまり使うことのない言語も含めていくつか調べてみたので、備忘録として。Perl $ perl -MO=Concise hello.pl 6 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 3 hello.pl:6) v:*,&,{,$ ->3 5 <@> print vK ->6 3 <0> pushma…

paizaオンラインハッカソンVol.1に挑戦

ここ何回か PHP の最適化について書いていますが、実はこの企画にチャレンジしています。 新人女子プログラマの書いたコードを直すだけの簡単なお仕事です!|paizaオンラインハッカソンVol.1以下、提出したコードを掲載しています。自力でチャレンジしてい…

PHP プログラムの最適化あれこれ

先日から PHP のコードの性能について記事を書いていますが、今回もそういった内容です。まず、ループカウンタの操作についてです。 以下のようなコードを考えます。計測用のプログラムなので計算に意味はありません。

データを正しい型で扱うことによる高速化

PHP のようなスクリプト言語では型を意識せずにコードを書いてしまいがちですが、適切な型を付けることで処理速度を大きく改善できる場合があります。そりゃあそうだろうという話なのですが、実際に計測してみると予想以上に大きな効果があって驚きました。…

PHP の配列の局所性

PHP で、整列済み配列を走査する処理を書いていたところ、メモリアクセスの局所性によると思われる速度低下が見られて面白かったので、記事にしてみます。例として配列の総和を計算するコードを考えます。

サンプリングのばらつきによる同一文書間の Hellinger 距離

LDA はサンプリングによってトピック分布を推定するので、同じ文書でも実行するたびに異なる分布が推定されることになります。このばらつきがどの程度の大きさになるのかを同一文書間の Hellinger 距離として調べてみます。実験の手順は次のとおりです。まず…

トピック数による Hellinger 距離の分布

前回は、Hellinger 距離を利用して類似の記事を抽出してみました。基準にする記事と他の各記事との距離をそれぞれ計算して、距離の小さなものほど似ているということでした。ところで、この Hellinger 距離は全体としてどのような分布になっているのでしょう…

Hellinger 距離による記事間の類似度計算

LDA の用途の一つとして、文書間の類似度の計算があります。今回はこれを試してみたいと思います。前回の記事で参考にした Blei 先生の教科書によると、文書間の類似度は Hellinger 距離を使って計算できるようです。以下のようなコードを書いて試してみます…

Term-score

前回に続き LDA の話題です。前回は、コーパスからトピックモデルを学習し、コーパスに含まれる記事が分野ごとにトピックに分かれる様子を見てみました。今度は、それぞれのトピックからどのような単語が生成されやすいかを調べてみたいと思います。トピック…

LDA による文書集合のクラスタリング

潜在ディリクレ配分法 (Latent Dirichlet Allocation) による文書集合のクラスタリングを試してみました。LDA の実装は探せば色々と出てくるのですが、今回は plda を利用して実験します。plda のソースコードは下記の URL からダウンロードできます。 http:…

今朝の array_reduce の実行速度

今朝の記事に書いた複数配列を取れる array_reduce ですが、これは全然駄目ですね。関数型言語でのリスト操作のような感覚で array_merge や array_shift を使ってしまっているので、パフォーマンスが悪すぎです。こんなコードを使って実行時間を計測してみ…

複数の配列を取る array_reduce の実装

PHP の array_reduce は一つの配列しか扱えません。array_map などと同じように、複数の配列を扱いたいことがあります。簡単な例を一つ挙げるならベクトルの内積計算です。次のように書きたいところです。

Doctrine 2 の find メソッドには配列を渡せる

私が現在担当しているプロジェクトでは Symfony2 を使っています。 Doctrine 2 の find メソッドは、配列を渡すと WHERE field IN (...) になってくれるのですね。知りませんでした。7. Working with Objects — Doctrine 2 ORM 2 documentation

Excel の行列関数と配列数式

ここ数日、会社の仕事で Excel のシートを作成しています。今さらながら MATCH 関数や INDEX 関数、配列数式の使い方を少し覚えました。これらの関数や配列数式の使い方はマイクロソフト社のページに書かれています。この記事の内容はこれらの実例です。 ワ…

なぜ PHP の三項演算子は左結合なのか

PHP の三項演算子が左結合で使いにくいという話題についてです。次のプログラムは大抵の言語では one を表示するのですが、PHP では two になってしまいます。

アカウントを共有するときの SSH の設定

そもそもアカウントを共有するのが良くないことだというのは重々承知。とはいえ、仕事ではそういう環境で作業をすることもよくあります。お客様のサーバで作業する場合など、社名でアカウントを一つ作成して、複数人の作業担当者で共有するという運用です。…