matlab 随机生成每列只有一个1 其余为0的矩阵

作者&投稿:微进 (若有异议请与网页底部的电邮联系)
用matlab如何创建一个随机矩阵:它的每行每列都只有一个位置为1,其余为0~

创建一个随机矩阵:它的每行每列都只有一个位置为1,其余为0
a=eye(5)
b=randperm(5)
c=a(:,b)
这样c就满足要求。

创建一个矩阵只要求每列上只有一个位置为1
a=zeros(5);
for i=1:length(a)
b=randperm(5);
a(b(1),i)=1;
end

a=(round(rand(10,1)));%求一个随机0-1矩阵
A=diag(a);%用0-1矩阵形成对角矩阵
b=randperm(10);
C=A(:,b)
%C是把一个随机的对角矩阵打乱

m=10;%行数
n=15;%列数
A=zeros(m,n); %生成全零矩阵
b=randi(m,[1 n]); %生成n个从1到m的随机整数
ind=sub2ind([m,n],b,1:n);%形成位置
A(ind)=1;%将对应位置变为1

可以先生成一个M*N的零矩阵,然后再每列随机选择某行的数赋值为1
A=zeros(M,N);
for ni=1:N
p=randperm(M);%随机排序1到M的整数
A(p(1),ni)=1;
end

m=6;n=5;%6行5列
full(sparse(randint(1,n,[1,m]),1:n,1,m,n))

就相当于每列生成一个随机整数,范围1~M,对应的位置位1,其余位置为0


梅列区18483706616: matlab 随机生成每列只有一个1 其余为0的矩阵 -
自永乳酸: m=10;%行数 n=15;%列数 A=zeros(m,n); %生成全零矩阵 b=randi(m,[1 n]); %生成n个从1到m的随机整数 ind=sub2ind([m,n],b,1:n);%形成位置 A(ind)=1;%将对应位置变为1

梅列区18483706616: 用matlab如何创建一个随机矩阵:它的每行每列都只有一个位置为1,其余为0 -
自永乳酸: 创建一个随机矩阵:它的每行每列都只有一个位置为1,其余为0 a=eye(5) b=randperm(5) c=a(:,b) 这样c就满足要求.创建一个矩阵只要求每列上只有一个位置为1 a=zeros(5); for i=1:length(a)b=randperm(5);a(b(1),i)=1; end

梅列区18483706616: 如何在MATLAB中生成一个0 1矩阵(每一行,每一列只有一个1) -
自永乳酸: 提供一个方法:n=10;%可以改成你想要的数A=zeros(n);index=randperm(n);%生成随机排列是关键A((n)*(0:n-1)+index)=1因为是随机序列,所以每次都不一样,一个...

梅列区18483706616: matlab 产生矩阵,每行每列最多一个1,其余为零不是每行每列只有一个1,是最多一个1,也可以全为零 -
自永乳酸:[答案] a=(round(rand(10,1)));%求一个随机0-1矩阵 A=diag(a);%用0-1矩阵形成对角矩阵 b=randperm(10); C=A(:,b) %C是把一个随机的对角矩阵打乱

梅列区18483706616: 我想用MATLAB生成16^16个由0和1组成的16*16的矩阵,要求每一行每一列只能有一个1其他为0,请问怎样生成?谢 -
自永乳酸: 给你个思路,每一行每一列都只有一个1,那就是说明这个矩阵的行经过行变换之后,一定是一个单位矩阵. 就是说你可以先生成一个单位矩阵,然后把行或者列的顺序打乱即可. 算了,还是帮你写好吧. 程序如下: L=eye(16,16); L=L(:,randperm...

梅列区18483706616: matlab 列出每行每列只有一个1的所有情况 -
自永乳酸: % 每行每列只有一个1,必须是方阵才能实现% 所以 M*N,必须是 M = N n = 5; a = eye(n); A = perms(1:n); R = arrayfun(@(x) a(:,A(x,:)),1:length(A),'un',false)% 共有120种可能.

梅列区18483706616: 我想用MATLAB生成5^5个由0和1组成的5*5的矩阵,要求每一行每一列只能有一个1其他为0,请问怎样生成?谢谢! -
自永乳酸: 5阶单位矩阵符合你的要求,其他的矩阵可以通过调整单位矩阵获得,生成5阶单位矩阵函数为eye(5).

梅列区18483706616: 我想用matlab 来实现以下的小程序: 随机产生一个布尔矩阵(要保证这个矩阵的每一列至少有一个1) 每次
自永乳酸: 你这个程序有问题. 问题在于你没有把握好算法.你犯的错误在于你没有明白每一次循环删除都会使得矩阵的维数发生变化:比如“for j=1:20”,这里你认为矩阵的列一直为20.显然这是错误的. 显然这是个死循环,给出参考程序: function H ...

梅列区18483706616: MATLAB实现一个随机矩阵 每行元素和为1 -
自永乳酸: % 初始化随机矩阵 m = 6; % m行 n = 8; % n列 a = rand(m, n);% 矩阵处理 for irow = 1:m a(irow, :) = a(irow, :)/sum(a(irow, :)); end disp(a);

梅列区18483706616: 用MATLAB编程输出符合以下条件的m*n矩阵(m<n):每行有且只有一个1,其余全为零,且每列最多只有一个 -
自永乳酸: Here are some examples:>> random01(4,7) ans = 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0>> random01(4,7) ans = 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0>> random01(4,7) ans = 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网