Matlab使用随机元素生成矩阵

时间:2014-08-28 10:54:02

标签: matlab random matrix

如何使用布尔元素生成矩阵,但每行的总和等于某个常数。

2 个答案:

答案 0 :(得分:6)

每一行都是一个数字吗?

k = 5;
m = 10;
n = 10;

[~, I] = sort(rand(m,n), 2)    
M = I <= k

如果您不想在每一行中使用相同数量的1,而是拥有一个向量指定每行需要多少1,那么您需要使用{ {1}}:

bsxfun

答案 1 :(得分:1)

假设您希望有20列(n=20),而您的向量a包含每行所需的数量:

n=20;
a= [5 6 1 9 4];
X= zeros(numel(a),n);
for k=1:numel(a)
    rand_order=randperm(n);
    row_entries=[ones(1,a(k)),zeros(1,n-a(k))];
    row_entries=row_entries(rand_order);
    X(k,:)=row_entries;
end
X=boolean(X);

我所做的是生成一个随机排序的索引数组rand_order,然后得到一个数组,其中包含所需数量为0的数组。根据{{​​1}}重新排序这些元素,并将其保存为逻辑。并且由于使用了for循环rand_order,所有时间都会再次计算,因此为您的输出提供了不同的位置:

rand_order