随机矩阵,其值的总和不大于1

时间:2018-04-30 19:45:58

标签: python numpy matrix

我在numpy中遇到了矩阵。 我需要创建矩阵,其中sum by column不会大于1。

np.random.rand(3,3).round(2)

给出

array([[ 0.48,  0.73,  0.81],
       [ 0.4 ,  0.01,  0.32],
       [ 0.44,  0.4 ,  0.92]])

是否有一种智能方法可以生成具有随机数的矩阵,其中按列的总和不会大于1? 谢谢!

3 个答案:

答案 0 :(得分:2)

你可以这样做:

x = np.random.rand(3,3)
x /= np.sum(x, axis=0)

这背后的基本原理是你将每一列除以所有值的总和。这可确保所有列都添加到1。

或者,你可以这样做:

x = np.random.rand(3,3)/3

因为每个数字都在[0,1]之间。如果你将域压缩到[0,1 / 3],则保证总和为< 1。

一般不清楚当你想要对数字进行限制但仍希望它们是随机的时你的意思。

答案 1 :(得分:0)

将列标准化为随机值0&lt; x <= 1,因此当您请求时,按列的总和不会大于:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='ng-valid ng-valid-required ng-dirty ng-valid-parse ng-touched' and @id='createCreds']"))).click();

答案 2 :(得分:0)

您始终可以确保限制开始的值:

>>> numcols=3
>>> np.random.uniform(0,1/numcols,9).reshape(3,3)
array([[ 0.26718273,  0.29798534,  0.0309619 ],
       [ 0.10923526,  0.12371555,  0.03797226],
       [ 0.15974434,  0.02435774,  0.30885667]])

对于方阵,这有利于(可能不是?)它同时在行上工作。但是,您不能拥有(0,0,1)行。