Saya mencoba memodifikasi beberapa kode python yang ada.

Baris dalam kode yang ingin saya ubah adalah:

scipy.stats.uniform(0.0, 100.0)

Jadi ini memberi saya variabel acak kontinu seragam antara 0 dan 100.

Saya ingin mencapai hasil yang hampir sama, tetapi saya ingin memiliki rentang tertentu yang tidak disertakan. Misalnya, saya mungkin ingin variabel seragam antara 0 dan 70, dan antara 80 dan 100. Dengan kata lain, saya hanya ingin memotong 70 hingga 80 di luar rentang.

Jelas saya tahu cara menghasilkan rentang dengan angka yang hilang, tetapi saya bingung dengan fakta bahwa itu adalah jenis objek tertentu. Saya membutuhkan output saya untuk menjadi jenis objek scipy.stats._continuous_distns.uniform_gen yang sama untuk bekerja dengan sisa kode.

Apakah ada sesuatu yang ada yang memungkinkan saya melakukan itu?

Terima kasih!

0
user1551817 3 Agustus 2019, 12:14

1 menjawab

Jawaban Terbaik

Gunakan rv_histogram untuk PDF konstan sepotong demi sepotong. PDF juga bisa menjadi nol dalam rentang nilai:

In [1]: import numpy as np

In [2]: bins = np.array([0, 70, 80, 100])

In [3]: vals = np.array([1.0, 0.0, 1.0])

In [4]: vals = vals * (bins[1:] - bins[:-1])   # normalize the PDF

In [5]: vals /= vals.sum()

In [6]: import scipy.stats as stats

In [7]: rv = stats.rv_histogram((vals, bins))

In [8]: sample = rv.rvs(size=10000)

In [9]: ((70 < sample) & (sample < 80)).any()

Out[9]: False

(Perhatikan bahwa Anda perlu menormalkan PDF secara manual). Jika Anda menginginkan PDF non-konstan, maka Anda harus membuat subkelas scipy.stats.rv_continuous dan menyediakan implementasi _pdf dll.

1
ev-br 4 Agustus 2019, 09:05