首先,认识对于固定的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 < = m
< = 1)。因此,您可以使用n1
1s和n - n1
-1s创建一个数组,然后随机化该数组。
例如,假设n
为100,和所期望的平均值是0.8:
In [35]: n = 100
In [36]: m = 0.8
计算阳性的1的数量:
In [37]: n1 = int(round((m + 1) * n/2.0)) # rounded to the nearest int
创建的1的阵列和-1s:
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