如何在matlab中替换矩阵中的多个值

时间:2017-09-19 00:24:21

标签: matlab

我试图将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

是否有可能让它发挥作用?它没有给我一个错误,但也没有给我一个输出...

3 个答案:

答案 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