从{1,-1}生成随机数组的最简单方法是使用Numpy中预定义的平均值?

从{1,-1}生成随机数组的最简单方法是使用Numpy中预定义的平均值?,numpy,random,Numpy,Random,在numpy中,生成具有以下形式的n个值的随机数组的最佳方法是什么 arr = [1,-1,-1,1,1,1,...] 该平均值尽可能接近预定义值m,因此 print 1/n*np.sum(arr) >>> #value that is as close as possible to m 我一直在做实验 numpy.random.choice([-1,1], size=n) 但似乎找不到解决方案。您可以选择为传递给随机的数组中的每个元素输

在numpy中,生成具有以下形式的n个值的随机数组的最佳方法是什么

    arr = [1,-1,-1,1,1,1,...]
该平均值尽可能接近预定义值m,因此

    print 1/n*np.sum(arr)
    >>> #value that is as close as possible to m
我一直在做实验

    numpy.random.choice([-1,1], size=n) 

但似乎找不到解决方案。

您可以选择为传递给
随机的数组中的每个元素输入概率值。选择
。在这种情况下,你的平均值或期望值是p-q,其中p是正概率,q是负概率。请注意,这与
n
无关。如果你把正概率设为p,那么负概率是1-p。然后可以解2p-1=m,得到给定m的p值

例如,如果你的平均m为.4,你将通过[7,3]作为概率:

numpy.random.choice([1, -1], n, p=[.7, .3])
下面是一个例子:

In [25]:
n = 1e6
m = .4
p = (m + 1) / 2
np.random.choice([1, -1], n, p=[p, 1-p]).sum() / n

Out[25]:
0.39873799999999998

您可以选择为传递给
random.choice
的数组中的每个元素输入概率值。在这种情况下,你的平均值或期望值是p-q,其中p是正概率,q是负概率。请注意,这与
n
无关。如果你把正概率设为p,那么负概率是1-p。然后可以解2p-1=m,得到给定m的p值

例如,如果你的平均m为.4,你将通过[7,3]作为概率:

numpy.random.choice([1, -1], n, p=[.7, .3])
下面是一个例子:

In [25]:
n = 1e6
m = .4
p = (m + 1) / 2
np.random.choice([1, -1], n, p=[p, 1-p]).sum() / n

Out[25]:
0.39873799999999998

首先,要认识到,对于固定的
n
,您不能(通常)选择其平均值恰好是任意值
m
的数组。我假设您选择的是
m
,这是一个可能的解决方案,或者您可以得到接近给定平均值的值


n1
1s和
n2
-1s的平均值为
(n1-n2)/n
,其中
n=n1+n2
。所以你想要
m=(n1-n2)/n=(n1-(n-n1))/n=(2*n1-n)/n=2*n1/n-1
。这将给出
n1=(m+1)*n/2
(适用于-1)。首先,要认识到,对于固定的
n
,您不能(通常)选择其平均值正好是任意值的数组
m
。我假设您选择的
m
可能有解,或者您可以得到接近给定平均值的值

n1
1s和
n2
-1s的平均值是
(n1-n2)/n
,其中
n=n1+n2
。所以你需要
m=(n1-n2)/n=(n1-(n-n1))/n=(2*n1-n)/n=2*n1/n-1
。这就给出了
n1=(m+1)*/2
(适用于-1)
In [38]: x = np.ones(n, dtype=int)

In [39]: x[:n-n1] = -1
In [40]: np.random.shuffle(x)

In [41]: x
Out[41]: 
array([ 1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,
        1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,
       -1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,
       -1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1])

In [42]: x.mean()
Out[42]: 0.80000000000000004