[#42735] [Ruby 1.9-Feature#4147][Open] Array#sample で重みを指定したい — Yoji Ojima <redmine@...>

Feature #4147: Array#sample で重みを指定したい

52 messages 2010/12/10
[#42791] [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Shyouhei Urabe <redmine@...> 2010/12/18

チケット #4147 が更新されました。 (by Shyouhei Urabe)

[#42800] Re: [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Masaya TARUI <tarui@...> 2010/12/19

> じゃあ反対ないので実装はともかく、この仕様は基本入れる方向で考えましょう。反対の人は意思表示お早めに。

[#42763] [Ruby 1.9-Bug#4159][Open] test_block_variables(TestRipper::ParserEvents) が失敗する — Kouhei Yanagita <redmine@...>

Bug #4159: test_block_variables(TestRipper::ParserEvents) が失敗する

8 messages 2010/12/14

[#42894] [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Shyouhei Urabe <redmine@...>

Feature #4207: これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには

24 messages 2010/12/26
[#42935] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/04

むらたです。

[#42936] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/05

むらたです。

[ruby-dev:42878] Re: [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい

From: Kenta Murata <muraken@...>
Date: 2010-12-24 00:29:27 UTC
List: ruby-dev #42878
むらたです。

On 2010/12/23, at 14:56, Yusuke ENDOH wrote:

>> Ojima さんが欲しがってる「n標本だけの重み付き抽出」を Array#sample で対応するなら、
>> 次のようにすると良いのではないでしょうか。
>> 
>> - Array#sample では重みを配列かハッシュで受け取る。
>> - Array#sample_by を用意し、後置ブロック経由で重みを与えられるようにする。
> 
> IRC では、sample(weight: proc { ... }) としたらどうかな、という
> 案が挙がっていました。

私も同様のインターフェイスを考えていました。
weight は proc だけじゃなくて配列とハッシュも受け付けられれば良いと思います。


>> n がある程度大きい場合は Walker のアルゴリズムを採用したほうが効率が良いはずです。
>> アルゴリズムを切り替えるための閾値の調査などが必要になるでしょうね。
>> Walker のアルゴリズムは昔 boost 用に作ったことがあります。
>> それは CodeRepos の http://bit.ly/eAk1M1 ここに置いてあるのですが、
>> 必要なら私が実装しても構いません。
> 
> おお。
> ところで、mrkn さんは何のためにこれを作ったのかが興味あります。
> この提案はユースケースが明確でなく、その辺の議論がどうも机上の域を
> こえてない感じですので、参考になるのではないかと。

discrete_distribution.hpp は、それと同じディレクトリにある zipf_distribution.hpp のために
作りました。zipf_distribution.hpp は Zipf-Mandelbrot 分布の実装です。

私が Zipf-Mandelbrot 分布を作った理由は、離散ベキ分布に従う乱数を生成する必要があったからです。
学生の頃、複雑ネットワークの研究をしていて、観測データの検証用に使ったり、
頂点の次数 (接続する辺の本数) がベキ分布に従うようなネットワーク構造を作るときに使いました。


--
Kenta Murata
OpenPGP FP = 1D69 ADDE 081C 9CC2 2E54  98C1 CEFE 8AFB 6081 B062

本を書きました!!
『Ruby 逆引きレシピ』 http://www.amazon.co.jp/dp/4798119881/mrkn-22

E-mail: mrkn@mrkn.jp
twitter: http://twitter.com/mrkn/
blog: http://d.hatena.ne.jp/mrkn/


In This Thread