【问题标题】:Is there a way to generate a matrix in which each element is defined as 10+row_index + column_index without for loops?有没有办法生成一个矩阵,其中每个元素都定义为 10+row_index + column_index 而没有 for 循环?
【发布时间】:2013-01-18 21:09:00
【问题描述】:

我正在尝试生成一个矩阵,其中每个元素都定义为 10 * row_index + column_index。行和列可以波动到一个 9x9 矩阵。例如:

11    12    13    14    15    16
21    22    23    24    25    26
31    32    33    34    35    36
41    42    43    44    45    46
51    52    53    54    55    56

for 循环的算法非常简单,但有人警告我,在处理矩阵时,除非绝对必要,否则我应该避免使用for 循环,因为它们比向量/矩阵运算慢。

在 Matlab 2012b 中还有哪些其他方法可以生成这样的矩阵?

【问题讨论】:

  • 我不明白为什么这应该被否决。

标签: matlab matrix


【解决方案1】:

对于您的特定矩阵,它非常简单:

nRows = 4;
nCols = 5;

out = bsxfun(@plus,10*(1:nRows)',1:nCols)

out =

11    12    13    14    15
21    22    23    24    25
31    32    33    34    35
41    42    43    44    45

【讨论】:

  • @Ricardoaltamirano:在最新版本的 Maltab 中,for 循环并不总是较慢,但在这种情况下,我认为你无法击败 bsxfun。
  • 感谢乔纳斯的提示。我不知道 for 循环的速度在最近的版本中得到了提高,所以我回到了我在使用矩阵/在矩阵中工作的其他程序的经验中,其中循环几乎总是慢比矩阵运算。
  • @RicardoAltamirano:矢量化操作通常仍然是要走的路。然而,简单的循环已经从 JIT 加速中受益匪浅。
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
相关资源
最近更新 更多