我试图将N个零变成" 1"。我的代码一次只能改变一个零。同时将零改为" 1"的最佳方法是什么? N次?
> magnitude 1e300
1.0e300
> sqrt (realPart 1e300 ^ 2 + imagPart 1e300 ^ 2)
Infinity
>
谢谢
编辑:
N=4;
board=zeros(N);
board(randi(numel(board)))=1
是否有可能让它发挥作用?它没有给我一个错误,但也没有给我一个输出...
答案 0 :(得分:1)
我建议对atru的答案进行一点改进。您需要做的就是:
N=4;
board=zeros(N);
board(randperm(numel(board), N)) = 1;
这里randperm
基本上会从集合1生成N个随机数:(N * N)来填充矩阵
答案 1 :(得分:0)
这是避免显式for
循环
N=4;
board=zeros(N);
ind_1s = randperm(N*N);
board(ind_1s(1:N)) = 1;
这会生成所有矩阵索引的随机排列,然后用1填充第一个N
。
您的解决方案也会起作用,但是当新选择的索引已经有1
时,它需要一个条件
N=4;
board=zeros(N);
x=1;
while (x<=N)
ind_1s = randi(numel(board));
if board(ind_1s)==0
board(ind_1s)=1;
x=x+1;
end
end
对于大型矩阵,第一个可能性能更好,但需要使用matlab profiler或简单的时序进行检查。
答案 2 :(得分:0)
您可以生成一个0 NxN
矩阵,其中M
随机放置1个单行
myMatrix = reshape(randperm(N^2)<=M, N, N);
在特定情况下,只需将M
替换为N
。