【问题标题】:Generate binary matrix with specific number of ones in row生成具有特定行数的二进制矩阵
【发布时间】:2018-03-25 09:32:54
【问题描述】:

编辑:我还必须让每一列的总和等于一个特定的数字!!

我想生成一个二进制 NxN 矩阵,使得每一行包含特定数量的 1,而不重复行。示例:生成4x4矩阵,每行2个1,列值之和为2,即生成

因此,每一行都是唯一的,并且正好有 2 个,每列的总和为 2。错误的答案是:

B =

 1     1     0     0
 1     0     1     0
 1     0     0     1
 0     1     1     0

因为第 1 列的总和不等于 2(而是 3),而第 4 列的总和不等于 2(而是 1)。每列加起来应该是2。如何在matlab中得到正确答案?

【问题讨论】:

  • 只是评论,因为这不是我的答案:Roger Stafford 显示了一种非常有效的方法来获得所有可能的排列。即使长度 > 10。x=[1 1 0 0];n = size(x,2); k = sum(x==1); C = nchoosek(1:n,k); m = size(C,1); B = zeros(m,n); B(repmat((1-m:0)',1,k)+m*C) = 1
  • 你能用一个例子解释你的编辑吗?
  • 是的,完成了。我添加了一个错误的示例。
  • 这让我想起了八皇后问题。也许这可以帮助你:8-queens-problem -Generating All Solutions
  • @Irreducible:我认为没有那么复杂。如果矩阵是 4x4,那么我需要每行 2 个。如果矩阵是 6x6,那么我每行需要 3 个,如果是 8x8,则需要 4 个,......等等。每一行应该是唯一的。没有简单的解决方案?

标签: matlab matrix binary


【解决方案1】:

你可以尝试随机生成一个矩阵 列表的排列p = randperm(n,k) https://fr.mathworks.com/help/matlab/ref/randperm.html?requestedDomain=www.mathworks.com

并从此行生成一个矩阵(在带有循环的列表中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 2015-11-26
    • 2018-10-26
    • 2012-11-21
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多