我想創建一個具有以下約束的二維 numpyM大小陣列n,n(即方陣):M
- 每行之和等于一
- 每行的元素都在0到1之間
- 支配的 row 的值
i位于 entryM[i,i]。
例如,對于一個方陣,它將類似于
M = np.array([[0.88,0.12],[0.13,0.87]])
- (獎勵)理想情況下,我希望每行的條目遵循某種高斯分布,其峰值(對于 row
i)位于 elementM[i,i]。
在這個 SO 執行緒 中,提出了一個類似的問題。但是,在那里玩回應時,我無法找到解決方法。這是一個搜索問題,我確實理解它可能被表述為一個優化問題。但是,我想知道是否可以在不需要一些專門的求解器的情況下滿足這些約束。
uj5u.com熱心網友回復:
對于 1) 和 2):
M = np.random.rand(n,n)
x = M / M.sum(1, keepdims=True)
uj5u.com熱心網友回復:
我從每個坐標的行數中減去列數,然后用它們計算高斯函式的值,最后乘以一個隨機陣列并歸一化。
它可能不是那么隨機,但它很有可能滿足您的要求:
>>> size = 4
>>> ii, jj = np.indices((size, size))
>>> gaussian = np.exp(-((ii - jj) ** 2) / 2)
>>> result = np.random.normal(1, .1, (size, size)) * gaussian
>>> result /= result.sum(1, keepdims=True)
>>> result
array([[0.47556382, 0.38041462, 0.11953135, 0.02449021],
[0.24805318, 0.4126681 , 0.26168636, 0.07759236],
[0.10350016, 0.26245839, 0.37168771, 0.26235374],
[0.02027633, 0.11892695, 0.31971733, 0.54107939]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/485473.html
