[#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:42823] Re: [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい

From: Tanaka Akira <akr@...>
Date: 2010-12-20 13:56:08 UTC
List: ruby-dev #42823
2010年12月19日21:15 Yugui <yugui@yugui.jp>:

> * 効率的な実装の可能な仕様であるべきです。

もしこの話が復元抽出 (同じものが何回でも現れても良い)の話なら、
それを効率的に実装する乱数は、どんな分布にせよ、

x = f(rand(n))

として、f, n を適当に選ぶことで表現できるので、

f, n = Random.分布変換関数生成_分布の種類(パラメータ)

とかが効率的なんじゃないかと思っています。
(call が抜けてますが気にしないように)

f, n = Random.分布変換関数生成_離散分布(beg..end) {|v| 頻度 }
f, n = Random.分布変換関数生成_累積離散分布(beg..end) {|v| 累積頻度 }
...

とか、分布の指定のしかたがいろいろ欲しければ、そのぶんだけ
メソッドを作ればいいでしょう。

まぁ、f, n というのはあまりに生々しすぎるとは思いますが、原理としては。

しかし、問題は、Array#sample は非復元抽出だと言うことです。

> * [ruby-dev:41918] 非復元抽出の要望が入るとすれば、その要望と衝突せず、整合性を持つ仕様である必要があります。

ここの記述は間違っていると思います。
Array#sample は非復元抽出 (同じものはたかだか一回しか現れない) です。
[ruby-dev:41918] は復元抽出の要望です。
[ruby-dev:41919] には日本語でそう書いてありますね。

(まぁ、私にとっても、復元抽出・非復元抽出は親しみのある名前ではありません)

なので、被復元抽出を効率的に実装する方法について検討が必要ですが、
それはちょっと自明ではありません。

> * mrknさんのMath/Random構想を考慮して欲しいです。あちらで提供される分布実装と整合性を持つ仕様であって欲しいです。

Random に話を広げると、連続分布の話が出てきますね。
Array#sample だけなら、離散分布だけでいいんですが。

連続分布では個々の要素に対する頻度をすべて調べるのは無謀だし、
あと、復元抽出と非復元抽出の違いに意味はないと思うので、
話はさらに変わってくるでしょう。
-- 
[田中 哲][たなか あきら][Tanaka Akira]

In This Thread