gpt4 book ai didi

matlab - 构造一个二进制矩阵,使得每列仅包含单个 "1"并且每行的总和为所需值

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:56 24 4
gpt4 key购买 nike

我想构建一个满足以下约束的二进制(0 和 1)矩阵:

  1. 每一列必须只包含单个二进制 1,该列的其余元素为 0。

  2. 矩阵的每一行的总和应该是一个期望的值。例如,给定一个 [5 7 6 8 ......] 的 rowSum 向量,那么第一行的总和应为 5,第二行的总和应为 7,依此类推。

  3. nCol==Sum(rowSum)

此外,我想考虑几个(例如,7 个)满足相同条件的矩阵。

编辑:
我尝试编写代码并完成了其中的一部分。代码是:

x=rand(21,50,7);
for k=1:7
cons=max(x(:,:,7));
for i=1:50
for j=1:21
if x(j,i,k)==cons(i)
x(j,i,k)=1;
else
x(j,i,k)=0;
end
end
end
end
x

最佳答案

并非总能构造出满足您要求的二进制矩阵。假设您想要一个大小为 nRowsxnColsrowSum 的二进制矩阵(长度为 nRows 的向量)rowSum(k)k 行中 1 的个数。所以,如果 nCol ~= sum( rowSum ) 就不可能构造这样的矩阵:你要么有没有 1 的列,要么有太多 的列>1s...

因此,您的二进制矩阵完全通过 rowSum 定义 - 直到其列的随机排列。

这个构造基本矩阵b的函数怎么样:

function b = makeBizarreBinaryMatrix( rowSum )

nRows = numel( rowSum );
nCols = sum( rowSum );
rows = 1:nRows;
rowInd = zeros( 1, nCols );
rowInd( cumsum( [1 rowSum(1:end-1)] ) ) = 1;
rowInd = rows( cumsum( rowInd ) );
b = sparse( rowInd, 1:nCols, 1, nRows, nCols );

现在您可以使用 randperm随机排列列的顺序:

nb = b(:, randperm(size(b,2)) );

祝你论文顺利。

关于matlab - 构造一个二进制矩阵,使得每列仅包含单个 "1"并且每行的总和为所需值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14380076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com