如果没有 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 ...] 吗?

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, [])将此矩阵重塑为行向量,按列主顺序(向下,然后横向(读取元素。

一种方法是[1,2,3...], [2,3,4...] and [3,4,5...]制作三个列表并interleave它们。或者,您可以利用以下模式:[1,2,3,4,5,6,7,8,9]-[0,0,0,2,2,2,4,4,4]=[1,2,3,2,3,4,3,4,5].repelem()函数对于此类操作很有用。

你可以尝试像belwn这样的cell2mat+arrayfun

n = 3;
m = 3;
res = cell2mat(arrayfun(@(x) x+(1:n),1:m,'UniformOutput',false));

这样

res =
2   3   4   3   4   5   4   5   6

最新更新