如何随机分配矩阵元素

use*_*221 2 matlab matrix

在Matlab中,我想知道如何为任何给定大小的矩阵随机分配矩阵内的值?

例如:

Enter non-zero elements in 3*3 matrix? 3

      1
      4
      7
Run Code Online (Sandbox Code Playgroud)

这些元素随机放置在3*3矩阵中,其余6个元素变为零.

通常,对于我们在矩阵中输入的一些非零元素,矩阵中的其余元素变为零.

如何在Matlab中为上面的例子编写代码?我必须输入非零元素的数量,并在矩阵内随机分配输入值,而不指定任何特定的行或列.

Dan*_*Dan 5

使用randperm线性索引非常简单

V = [1,4,7];
M = zeros(3);
M(randperm(numel(M), numel(V))) = V
Run Code Online (Sandbox Code Playgroud)

如果您有旧版本的Matlab(请参阅注释,这也适用于您使用Octave),那么您可以尝试:

V = [1,4,7];
M = zeros(3);
I = randperm(numel(M));
M(I(1:numel(V))) = V
Run Code Online (Sandbox Code Playgroud)

  • @ user3789221 - 你最有可能使用旧版本的MATLAB,其中`randperm`只接受1个参数.确切地说,"randperm"的两种论证形式仅在"R2012a"中引入.为了模仿Dan编程的内容,你可以把它分成两个语句:`M2 = randperm(numel(M)); M(M2(1:numel(V)))= V;` (2认同)