如何使用布尔元素生成矩阵,但每行的总和等于某个常数。Matlab使用随机元素生成矩阵
回答
比方说,你想有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
,然后得到一个数组,其中包含所需数量的零填充。根据rand_order
将这些元素重新排序并保存并将其转换为逻辑。而且由于使用的for循环rand_order
的是所有的时间再次计算,所以让你的输出不同的地点:
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0
0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 0 1 1 0 0
1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
你的方法的作品!谢谢 – 2014-08-28 11:23:05
你错过了一个编辑。将该转换置于循环外的布尔值。否则,你每次都这样做。还要检查一下Dan的解决方案,该解决方案没有任何循环(对于大矩阵来说可能更快) – 2014-08-28 11:24:54
每一行都是相同的一个数字吗?
k = 5;
m = 10;
n = 10;
[~, I] = sort(rand(m,n), 2)
M = I <= k
如果你不希望相同数量的1
s分别排,而是有你想要多少1
当时的你需要使用bsxfun
以及矢量每行指定:
K = (1:10)'; %//'
m = 10;
n = 10;
[~, I] = sort(rand(m,n), 2)
M = bsxfun(@ge, K,I)
伟大的解决方案。这个问题似乎很难矢量化 – 2014-08-28 11:37:30
- 1. 矩阵的Matlab随机元素
- 2. Matlab的生成多个随机矩阵
- 3. Matlab - 为矩阵生成随机坐标
- 4. 在Matlab中用另一个矩阵生成随机矩阵
- 5. 使用错误生成随机矩阵
- 6. 生成随机2x100矩阵
- 7. 生成具有独立元素的随机矩阵
- 8. 矩阵生成MATLAB
- 9. Matlab生成矩阵
- 10. 在Matlab中生成加权随机布尔矩阵
- 11. 在MATLAB中生成随机加权邻接矩阵
- 12. 翻转矩阵中的随机元素
- 13. 如何生成对称随机矩阵?
- 14. R中的随机生成矩阵
- 15. RAS算法生成随机矩阵
- 16. 从随机矩阵生成样本
- 17. 生成一个随机矩阵
- 18. MATLAB改变矩阵元素
- 19. Matlab矩阵元素检查
- 20. 在Matlab中生成多元随机数
- 21. 使用MATLAB中其他矩阵的元素创建矩阵
- 22. 使用MATLAB生成随机多项式
- 23. 使用Matlab生成奇数随机数
- 24. 使用matlab条件生成随机数
- 25. 从矩阵生成的矩阵与Matlab生成的Python图形
- 26. 使用Javascript中的随机x和y坐标生成矩阵
- 27. 如何使用Python生成随机N维旋转矩阵?
- 28. 如何使用spark在HDFS上生成随机矩阵文件
- 29. 生成一个具有N个非零元素的随机稀疏矩阵
- 30. 矩阵的随机交换列:Matlab的
我认为你可以尝试生成随机元素的矩阵。然后按行进行排序并将最大的n个元素设置为true,将其他元素设置为false。这会给每一行总和n。 – patrik 2014-08-28 11:04:45
@RTL类似的问题,但链接的问题没有一个接受的答案,这一个是“更容易”,因为你没有专栏的特定约束。 – 2014-08-28 11:40:08
@Shai我不知道这是否应该标记为重复,因为目前提供的答案非常类似的问题不起作用... – Dan 2014-09-02 06:02:33