質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

5回答

1355閲覧

確率密度関数に基づく乱数を生成

aochan01

総合スコア17

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/02/03 08:18

編集2019/02/03 09:15

前提・実現したいこと

自分で定義した確率密度関数に基づく乱数を生成

発生している問題・エラーメッセージ

そもそもアプローチの仕方がわからない.. scipyのrvsもここでは使えなさそうだった.

該当のソースコード

Python

1import numpy as np 2import random 3lamda=1.5 4xi=0.4 5x=random.uniform(1.01,1.5)#違うというかいらない気がする 6pdf=1/np.sqrt(2*np.pi)/xi/(x-1)*np.exp(-((np.log(x-1)-lamda)/xi)**2/2) 7#このあとがどうしたらいいかわからない. 8#random(pdf)???

試したこと

scipy.stats.rvs_ratio_uniforms:ドキュメンテーション読んで使えそうだったのにimport時に下記のようなエラー
import scipy.stats.rvs_ratio_uniforms as rvs

ModuleNotFoundError: No module named 'scipy.stats.rvs_ratio_uniforms'

補足情報(FW/ツールのバージョンなど)

環境はanacondaです.
pdf(x)とxの範囲は定義できています.xの定義域は,1<=x<=無限.x=1.2程度でピークの非対称の分布.
分布は対数正規分布をベースにしたものですが,平均・標準偏差を改良してあるため,一般的なscipyのモジュールなどは使えません.
正規分布の例などあれば,自分で直していけると思います.
あるいは,前述のモジュールを使えるようになる方法を教えてください.
お願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/02/03 08:25

import時に出たエラーを記載してください。
hayataka2049

2019/02/03 08:25

どんな分布をやる想定なのかも書いていただけると回答しやすいです。
aochan01

2019/02/03 08:32

import scipy.stats.rvs_ratio_uniforms as rvs ModuleNotFoundError: No module named 'scipy.stats.rvs_ratio_uniforms' です
hayataka2049

2019/02/03 08:35 編集

他の人も見やすいように質問を編集してそちらにも書いておいてください。
aochan01

2019/02/03 08:35

分布は対数正規分布を改良したものです
guest

回答5

0

解決済みですが、面白そうだったのでスクラッチで実装してみました。

python

1import numpy as np 2lamda=1.5 3xi=0.4 4 5x = np.arange(1.01,15,0.001) 6pdf=1/np.sqrt(2*np.pi)/xi/(x-1)*np.exp(-((np.log(x-1)-lamda)/xi)**2/2) 7 8y_lower = np.min(pdf) 9y_upper = np.max(pdf) 10 11trial = 10000 12res = [] 13for i in range(trial) : 14 x = np.random.uniform(1.01,15) 15 y = np.random.uniform(y_lower,y_upper) 16 pdf = 1/np.sqrt(2*np.pi)/xi/(x-1)*np.exp(-((np.log(x-1)-lamda)/xi)**2/2) 17 18 if y<=pdf: 19 res.append(x) 20

モンテカルロ法で円周率を計算するコードから着想を得て、確率分布の理論値よりも上か下かを判定するという方法で乱数を生成しました。
結果であるresのヒストグラムを作成したところ、自己解決にあるものに近似したものが出力しました。

投稿2019/02/04 13:53

編集2019/02/05 03:21
R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

importは結局できませんでしたが,random.lognormvariateの数値をいじっくていたら,欲しい値が得られました.協力ありがとうございました.イメージ説明

投稿2019/02/03 10:54

aochan01

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回答ではありませんが参考までに・・・
pythonを使って、確率密度関数(正規分布、標準正規分布)を覚えちゃう!

#“確率密度関数 python”で、ググればすぐ出ますよd^^

投稿2019/02/03 08:25

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aochan01

2019/02/03 08:34

正規分布やポアソン分布など一般的な分布であれば,scipy.stats.normとかで余裕なんですが,自分で定義した分布なので,この方法が使えなくて困っている次第です..
guest

0

以下のQiitaの記事が回答になっていると思います。
Scipyもrvsも使えます。

Qiita Pythonで任意の確率密度関数からサンプリングを行う方法

投稿2020/01/15 12:42

physics303

総合スコア89

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず、rvs_ratio_uniformsを使いたい場合はscipy 1.2.0以降が要求されます。環境が古くないかを確認してください。

SciPy 1.2.0 Release Notes — SciPy v1.2.0 Reference Guide

また、以下の書き方でimportしてください。

python

1from scipy.stats import rvs_ratio_uniforms as rvs

投稿2019/02/03 08:41

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aochan01

2019/02/03 09:01

更新してimportを変えてみましたが,依然エラーがでます. ImportError: cannot import name 'rvs_ratio_uniforms' from 'scipy.stats' (C:\ProgramData\Anaconda3\lib\site-packages\scipy\stats\__init__.py)
hayataka2049

2019/02/03 09:11

import scipy して scipy.version.version を確認してください。1.2.0になりますか?
aochan01

2019/02/03 09:51

自分,モジュールの入れ方や確認法がよくわからないんですけど,anaconda navigaterによれば,scipyは1.2.0と出ていました. 確率密度関数の定義式から,乱数を生成する方法(参考のページ等)を教えていただければ,なんとかなりそうなんですが.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問