既存の乱数ベースのデータジェネレータ(Pythonで)をハッシュベースのデータジェネレータに置き換えて、this articleからインスパイアされたように、すべてを順番に生成する必要がなくなりたいと考えています。PRNGベースの生成からハッシュベースの手続き生成に移行するにはどうすればよいですか?
ハッシュの整数バージョンを取得し、ハッシュの最大値で割ることで、0から1までのfloatを作成できます。
フロートをとり、フラットレンジで乗算することで、フラットな整数レンジを作成できます。私はおそらくモジュロを使用してバイアスをかけて生きることができます。ハッシュ範囲は広く、フラット範囲は小さいからです。
ハッシュを使用してガウス分布または正規分布の浮動小数点値を作成するにはどうすればよいですか?
これらのすべての場合、私は新しいrandom.Randomオブジェクトの種として自分のハッシュを使用し、そのクラスの関数を使用して自分の数値を生成し、分布特性を正しく得ることができます?
瞬間、私のコードは次のように構成されています
num_people = randint(1,100)
people = [dict() for x in range(num_people)]
for person in people:
person['surname'] = choice(surname_list)
person['forename'] = choice(forename_list)
問題は、与えられた種子が矛盾しないようにするために、私は同じ順序ですべての人々を生成する必要があり、私が持っているということです姓の後に姓を生成します。 2つの間にミドルネームを追加すると、生成されたforenamesが変更され、すべての後続の人物の名前が変更されます。
私はこのようなコードを構築したい:
h1_groupseed=1
h2_peoplecount=1
h2_people=2
h4_surname=1
h4_forename=2
num_people = pghash([h1_groupseed,h2_peoplecount]).hashint(1,100)
people = [dict() for x in range(num_people)]
for h3_index, person in enumerate(people,1):
person['surname'] = surname_list[pghash([h1_groupseed,h2_people,h3_index,h4_surname]).hashint(0, num_of_surnames - 1)]
person['forename'] = forename_list[pghash([h1_groupseed,h2_people,h3_index,h4_forename]).hashint(0, num_of_forenames - 1)]
これは、ハッシュを生成するためにpghashに渡された値を使用して、何とか擬似乱数結果を作成するために、そのハッシュを使用します。
あなたがこれを行うにはしたくないのはなぜ? –
Box Muller変換を使用して、一様分布の変数を通常のものに変更することができます。 https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform – WNG
@ReblochonMasque属性の生成順序の変更に対してデータ生成器を堅牢にしたいからです。 – PhilHibbs