首页 > 解决方案 > 没有for循环,我可以在matlab中生成列表[1 2 3 2 3 4 3 4 5 ...]吗?

问题描述

与 Python 不同,MATLAB 列表生成表达式是有限的。在 MATLAB 中,我只能执行 a:b:c。我可以在不使用 for 循环的情况下在 MATLAB 中生成列表 [1 2 3 2 3 4 3 4 5 ...] 吗?

标签: matlab

解决方案


N = 3;
M = 4;
result = reshape((1:N).'+(0:M-1), 1, []);

result =
     1     2     3     2     3     4     3     4     5     4     5     6

这个怎么运作

(1:N).'+(0:M-1)使用隐式展开来创建M×N矩阵

 1     2     3   ...  M
 2     3     4   ...  M+1
 3     4     5   ...  M+2
   ...
 N     N+1   N+2 ...  N+M-1

然后reshape(..., 1, [])将此矩阵重塑为行向量,以列优先顺序(向下,然后横向)读取元素。


推荐阅读