Python从每个bin的范围中随机抽取数值

问题描述 投票:0回答:1

我目前正试图以CiLEO为参考实现美国航天局的分裂模型。我对如何实现作者所定义的特征长度感到非常困惑。

"对于CiELO中的实现来说,特征长度被分为100个仓,按对数比例均等地分布在1毫米和10厘米之间:计算每个仓的碎片数量,一旦每个碎片被分配到一个仓,其特征长度就会被定义,使用内置的matlab函数rand来提取仓内Lc的随机值。"

我的问题是最后一个组件,在每个bin内提取一个随机值来定义长度。我在网上找不到任何关于如何在给定bin边缘的情况下,在每个bin内提取一个属于bin的值。

为了便于演示,我目前已经将碎片数量函数定义为。

def number_of_fragments(length):
    return 0.1*length**-1.71
# Generating 100 bins evenly spaced on a log scale between 1mm (0.001 m) and 10cm (0.1 m)
bins = np.geomspace(0.001, 0.1, 100)

# Finding the corresponding number of fragments for each bin 
fragments = [number_of_fragments(b) for b in bins]

# Need to pick a random value that falls in the range of each bin
Lc = ???

如果有任何帮助,我将不胜感激!

python numpy statistics histogram simulation
1个回答
1
投票

像这样。

from random import uniform

bins = np.geomspace(0.001, 0.1, 100)
rand_floats = [uniform(bins[i], bins[i+1]) for i in range(len(bins)-1)]

通过索引迭代列表项,动态设置随机数生成范围

编辑:注意,这是假设均匀分布的,请看文档。https:/numpy.orgdocstablereferencerandomgeneratednumpy.random.uniform.html。

© www.soinside.com 2019 - 2024. All rights reserved.