【问题标题】:How to assign matrix elements randomly如何随机分配矩阵元素
【发布时间】:2014-09-19 07:35:43
【问题描述】:

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

例如:

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

      1
      4
      7

这些元素被随机放置在 3*3 矩阵中,剩下的 6 个元素变为零。

一般来说,对于我们在矩阵中输入的一些非零元素,矩阵中的剩余元素会变为零。

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

【问题讨论】:

  • 我想帮助编辑这个问题,让未来有类似问题的观众更清楚,但我不确定句子“我们在矩阵剩余元素中输入的非零元素”是什么意思在矩阵中变为零。”方法。你能再描述一下吗?也许显示一个示例矩阵?我很乐意在英语语法方面提供帮助。
  • @2cents 对不起它是非零的数量
  • 我编辑了帖子以澄清句子。如果您觉得它不代表您想说的话,请随时回滚或告诉我。

标签: matlab matrix


【解决方案1】:

使用randpermlinear indexing 非常简单

V = [1,4,7];
M = zeros(3);
M(randperm(numel(M), numel(V))) = V

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

V = [1,4,7];
M = zeros(3);
I = randperm(numel(M));
M(I(1:numel(V))) = V

【讨论】:

  • 我收到错误 -Error using ==> randperm 输入参数太多。 谢谢你
  • @user3789221 - 您很可能使用的是旧版本的 MATLAB,其中randperm 仅接受 1 个参数。准确地说,randperm 的二元形式只在R2012a 中引入。为了模仿 Dan 的编程,您可以将其拆分为两个语句:M2 = randperm(numel(M)); M(M2(1:numel(V))) = V;
  • @user3789221 很高兴它有帮助。请务必阅读我发布的链接以了解其工作原理。
猜你喜欢
  • 2017-02-17
  • 1970-01-01
  • 2023-04-08
  • 2014-10-22
  • 1970-01-01
  • 2020-07-13
  • 2020-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多