与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