如何创建一个随机矩阵,使所有行总和为1

use*_*030 6 matlab matrix

这是矩阵的样子:

有8列,说100行,任意行中的随机数总和为1.

.125 .125 .125 .125 ....... .125

.005 .105 .005 .205 ........ 205

.002 .003 .012.201 ....... .200

...

Matlab可以自动创建这种矩阵,即右边的随机矩阵吗?我正在寻找一个脚本.

Nzb*_*buu 10

使用bsxfun而不是repmat:

mat = rand(100, 8);
rowsum = sum(mat,2);
mat = bsxfun(@rdivide, mat, rowsum);
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 6

这里的另一个想法:对于每一行,你可以生成7个随机数字,并把这些作为你的"间隔"位置(0和1之间) - 换句话说,在8张随机数的总和为1,这是你的部分款项.然后你可以对它们进行排序并采用差异来得到你得到的随机数.这是我正在思考的代码:

numrows = 100;
partialsums = [zeros(numrows,1), rand(numrows,7), ones(numrows,1)];
partialsums = sort(partialsums, 2);
randmat = diff(partialsums, 1, 2);
Run Code Online (Sandbox Code Playgroud)

数字的分布将根据您的方式而有所不同.我将这种方法与Aabaz发布的方法进行了比较,并将其用于分发.

在此输入图像描述

所以我看起来更具指数性,你得到一些更高的价值,而且他更加统一,但你得到的随机数的截止值更低.