如何n
在Java中创建一个随机整数,在"线性递减分布" 之间1
和之间k
,即1
最有可能,2
不太可能,3
不太可能,......,k
最不可能,并且概率线性下降,如下所示:
我知道已经有关于这个主题的线程,我为制作一个新主题道歉,但我似乎无法从他们那里创造我需要的东西.我知道使用import java.util.*;
代码
Random r=new Random();
int n=r.nextInt(k)+1;
Run Code Online (Sandbox Code Playgroud)
在1
and 之间创建一个随机整数k
,均匀分布.
GENERALIZATION:任何提示创建任意分布的整数,即f(n)=some function
,P(n)=f(n)/(f(1)+...+f(k))
),也将受到赞赏,例如:
.
在Josh给出的有缺陷的随机方法的例子中,该方法产生具有给定上限的正随机数n
,我不明白他陈述的两个缺陷.
书中的方法是:
private static final Random rnd = new Random();
//Common but deeply flawed
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}
Run Code Online (Sandbox Code Playgroud)
Random.nextInt()
说,Returns the next pseudorandom, uniformly distributed int value from this random number generator's sequence.
所以它不应该是,如果n是小的整数,则顺序会重演,为什么这个只适用于2的幂?Random.nextInt()
生成均匀分布的随机整数,为什么会发生这种情况?(他提供了一个代码片段,清楚地证明了这一点,但我不明白为什么会出现这种情况,以及这与n是2的权力有什么关系).java random probability effective-java non-uniform-distribution
从这个问题:随机数发生器将数字吸引到范围内的任何给定数字?我之前做过一些研究,因为我之前遇到过这样一个随机数发生器.我记得的只是"穆勒"的名字,所以我想我找到了,在这里:
我可以在其他语言中找到它的大量实现,但我似乎无法在C#中正确实现它.
例如,这个页面,用于生成高斯随机数的Box-Muller方法表示代码看起来应该是这样的(这不是C#):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
double gaussian(void)
{
static double v, fac;
static int phase = 0;
double S, Z, U1, U2, u;
if (phase)
Z = v * fac;
else
{
do
{
U1 = (double)rand() / RAND_MAX;
U2 = (double)rand() / RAND_MAX;
u = 2. * U1 - 1.;
v = 2. * U2 - 1.;
S = u * u + v * v;
} while …
Run Code Online (Sandbox Code Playgroud) 我需要计算我有[x,y,z]坐标的结构的3D傅里叶变换.我想到内插到点之间最小间距的均匀网格并使用fft,但这在内存中变得不切实际,因此fft
无法使用.来自我的[x,y,z]数据的样本是:
xyz=[ 23.1860 44.9710 5.9280
25.5370 44.0090 4.9960
24.5030 44.5890 6.2280
20.0150 46.4080 7.9110
24.9910 44.6760 7.5330
4.8660 44.7120 8.6830
36.7170 33.7440 6.5570
11.1510 40.0590 5.8120
29.2550 34.8750 10.0850
5.4230 48.8200 12.7380
38.2020 35.7590 1.3260 ];
Run Code Online (Sandbox Code Playgroud)
非常感谢您的建议
我有3个标签:"A","B","C".
我想生成一个包含100个元素的随机列表,其中60%是"A",30%是"B",10%是"C".
我怎样才能做到这一点?(我是python中的新手,希望这个问题不是太傻.)
编辑:我的问题与这个问题略有不同: 生成具有给定(数字)分布的随机数
就像在评论中一样,我希望它们中的60%都是"A",并非每个元素都有60%的概率为"A".所以numpy.random.choice()不是我的解决方案.
的随机包包含一个类型的类Uniform
为均匀分布的类型。这适用于以下类型:
data Coin = Heads | Tails
Run Code Online (Sandbox Code Playgroud)
但是假设我想对一组具有非均匀分布的事物进行建模,例如通过添加硬币落在其一侧的可能性:
data Coin = Heads | Tails | Side
Run Code Online (Sandbox Code Playgroud)
现在我仍然可以Uniform
在其实现中使用非均匀分布来实现,但这会欺骗Uniform
.
我是否必须只使用一个独立的函数,或者是否有一些类型类用于“实际”分布的概念?
这个类型类在 RPG 的上下文中很有用,在那里你可以有一些类型
data Rarity = Common | Rare
data DropType = Club | Sword
Run Code Online (Sandbox Code Playgroud)
获得 aRare
和它是 a的机会Sword
可能低于其他值。但是从该类型的所有值的集合中提取值的概念仍然相同Rarity
,DropType
这就是为什么这对我来说看起来像是类型类的工作。
如何在FORTRAN中实现二维插值,其中数据如下所示.x和y是两个坐标,z是取决于它们的值,x是均匀间隔的,但是y不是均匀间隔的,并且对应于x的均匀值的y的最大值保持增加.不会失去太多准确性 -
谢谢SM
x y z
-----------
0 0 -
0 0.014 -
0 0.02 -
.....
....
0.1 0 -
0.1 0.02 -
0.1 0.03 -
.......
.....
1.0 0 -
1.0 0.05 -
1.0 0.08 -
.......
.......
Run Code Online (Sandbox Code Playgroud) 我想编写Java代码来生成范围[1,4]中的随机整数数组.数组的长度为N,在运行时提供.问题是范围[1,4]不均匀分布:
这意味着如果我创建N = 100的数组,数字'1'将在数组中平均出现40次,数字'2'出现10次,依此类推.
现在我使用此代码生成范围[1,4]中的均匀分布的随机数:
public static void main(String[] args)
{
int N;
System.out.println();
System.out.print("Enter an integer number: ");
N = input.nextInt();
int[] a = new int[N];
Random generator = new Random();
for(int i = 0; i < a.length; i++)
{
a[i] = generator.nextInt(4)+1;
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用非均匀分布实现它,如上图所示?
java arrays random non-uniform-distribution probability-density
我需要您的帮助来解决以下问题:
c ++ / opencv中是否有一个等效于以下代码的函数:
np.random.choice(len(vec), samples, p=probabilities[:,0], replace=True)
Run Code Online (Sandbox Code Playgroud)
提前致谢。