2011-01-05 6 views
1

ヒストグラムに似ているものを作成しようとしています。私は配列からバケットを作成しようとしています。0の周りの分割中心

ランダム配列が-10と10の間で2倍になるとします。これは非常に単純化されています。次に、中心点、この場合は0とバケットの数を指定します。

私は4つのバケットが必要な場合、除算は-10から-5、-5から0、0から5、および5から10になります。今私は最小と最大を-12と-9に変更し、4つの分割についてはもっと複雑にする。私は-3と3で除算をしたい。 0の周りに中心があります。 if文または時-6 0と0に6まで

1 ITSは分割サイズ

= Math.Ceiling((Abs(Max) + Abs(Min))/Divisions) 

を見つけるのは難しいそうすれば、基本的に、あなたはそれが0を中心としたか、したいかどうかを判断しなければならないこと端に状況に応じて、0またはDivisionSize/2のいずれかから反復処理します。あなたは指定された分割数で終わるとは限りませんが、それは近いでしょう。次に、配列を反復処理してビン数をインクリメントします。

これは良いことと思われますか?この方法は確実に機能しますが、最もエレガントではないようです。私はビンの作成とリストからのカウントが、より洗練された方法でlinqを使って巧妙なクラスで実行できるかどうかについて興味がありますか?

ビンを作成し、各ビンは性質も持つようなもの{取得;} returns list.Count(x=> x >= Lower && x < Upper).

答えて

0

ように私にはそれが簡単そうです:あなたは下限と各「部門」の大き見つける必要があります。 分割数によって0を中心に対称になりたいので、奇数(-3,3)は0、偶数(-3,0)(0,3)は0をとります。

下界= - マックス(ABS()から、ABS()への)

bucketSize = 2 *下界/部門

(天井に投げるし、必要に応じてbucketSizeと下界を更新)

使用ザン.Aggregateバケットの配列を更新する(位置は(value-lowerBound)/ devisionsで、必要に応じて追加の範囲チェックがある)。

注:あなたが提案した方法を実装しないでください。ゲッターが大規模な配列を歩いているような非自明な作業をすることは期待できません。

+0

私はBucketsがリストであると仮定しています。意味あり。集計はちょうど.Sum()。どこですか()?集計パートがどのように詳細に機能するかを説明します。あなたの応答に感謝します。 – Mark

関連する問題