首先,認識對於固定的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