我想用MATLAB生成满足条件的随机二进制矩阵A
(n x m):
每行包含一个值为1
的位置。其他职位是价值0
。具有1
值的位置是随机位置。
我试过这段代码
n=5;m=10;
%% A = randi([0 1], n,m);
A=zeros(n,m);
for i=1:n
rand_pos=randperm(m);
pos_one=rand_pos(1); % random possition of 1 value
A(i,pos_one)=1;
end
这是对的吗?
答案 0 :(得分:2)
解决方案有效,但效率低下
您正在使用randperm
创建向量(数组),然后仅使用向量的第一个元素
您可以使用randi
来创建标量(单个元素):
n=5;m=10;
A=zeros(n,m);
for i=1:m
%rand_pos gets a random number in range [1, n].
rand_pos = randi([1, n]);
A(rand_pos, i)=1;
end
您还可以使用以下"矢量化"解决方案:
rand_pos_vec = randi([1, n], 1, m);
A(sub2ind([n, m], rand_pos_vec, 1:m)) = 1;
以上解决方案:
sub2ind
转换"行索引" to"矩阵索引"。 答案 1 :(得分:1)