![]() |
1
18
因为流感我今天呆在家里:(我决定试着帮你解决这个问题。)。基本上你要求的是某种插值。我用了最简单的(线性的),这些是我的结果和代码。代码有点混乱,我可能会在接下来的几天内修复它。。
在下列情况下:
我得到了以下(最终)数组:
看起来很有前途,但让我们试试更疯狂的。。。
让我们看看图片:
看起来很管用:) 我希望我能解决你的问题(或者至少给你指出正确的方向)。请注意,我的代码目前有一些规定。也就是说,您提供的初始节点的概率必须达到100%,否则您可能会得到一些不可靠的行为。 另外,代码有点混乱,但概念相对简单。其他一些很酷的东西将是尝试,而不是使用线性插值,使用其他类型,这将给你更有趣的结果!
为了避免混淆,我只展示算法是如何工作的。
我给PHP一个
之间的插值
在这种情况下
下图显示绿色(初始值)和红色(插值值)。你可能得“看图像”才能看清楚整件事。你会注意到我用
这段代码可能应该用更面向对象的范式编写。我经常玩数组键(例如,我需要通过
这是我最后一次编辑,我保证:)因为我喜欢玩Excel,这显示了数字插值后百分比是如何正常化的。这一点很重要,特别是考虑到在你的第一张照片中,你所展示的是一种数学上的不可能。
在这张图中,我称了一下
|
![]() |
2
4
假设您可以处理百分比的整数,只需将0到99之间的每个值赋给一个结果—例如,0-9的结果可能是1,95-99的结果可能是6(给出10%=1和5%=6的情况)。一旦你得到了这个转换函数(不管你如何实现——你可以使用多种方法),你只需要生成一个0-99范围内的随机数,并将其转换成结果。 你的问题在你想要的代码(甚至是哪种语言-C#或PHP?)方面还不是很清楚但希望这会有帮助。 这里有一些C#代码,可以让你得到任何你喜欢的偏见,在合理的范围内-你不必用百分比来表示,但你可以这样做:
例如,你可以使用
|
![]() |
3
2
用C#快速肮脏的方式:
测试代码:
看起来像:
|
![]() |
4
1
一种生成非均匀随机数的通用技术 rejection sampling . 即使在这种情况下它可能是无效的,你仍然应该知道如何做到这一点,因为它适用于你提供的任何密度函数。
一个例子是:
如果无法轻松计算分布的逆,则拒绝采样特别有用。在这种情况下,使用 inverse transform sampling Jon's answer . 注:以上实现是通用的,因此使用0到1之间的随机值。通过构建一个只适用于您的方法的函数,一切都变得更容易:
|
![]() |
5
0
重新映射输出分布函数,使其下的区域是统一的,范围从0开始。然后计算它的积分。存储整数(例如,作为值数组)。然后,当您需要一个随机数来匹配轮廓时,首先从内置生成器中获取一个介于0和1之间的随机数,然后在积分上找到Y坐标,其中X坐标是您生成的值。最后,将该值缩放到所需的范围(例如,如果要查找介于0和10之间的值,则乘以10;如果要查找介于-8和+8之间的值,则乘以16并减去8)。 如果随机数生成器没有生成平面轮廓,那么最简单的方法是使用与上述方法相反的方法将其转换为平面轮廓。 |
![]() |
6
0
我还没试过,但我想这可能管用:
这样称呼它(使用第二个例子):
|
![]() |
ecology · 基于R中随机生成数集的子集列 2 年前 |
![]() |
Alan Jones · 使用random从列表创建动态列表 2 年前 |
![]() |
breking bed · 单击按钮时如何随机选择唯一编号 3 年前 |
![]() |
Carrot Man · 如何让熊猫数据框随机填充1和0? 3 年前 |
![]() |
Justin Arnold · 范围内的随机数不是随机数 3 年前 |
![]() |
Menna Magdy · 如何使用非模型字段进行过滤? 3 年前 |