在Matlab中的矢量化循环

时间:2017-02-23 08:25:34

标签: matlab loops for-loop vector vectorization

非常简单的问题,但我没有找到任何东西......

我必须将我的代码拆分到不同的部分并按以下方式运行,因为有些矩阵是从左到右构建的,有些是从右到左构建的,通过向后归纳。例如,如果我将它分成3个部分,我将按以下顺序运行这些部分:

1, 2, 3,

1, 2,

1,

1, 2,

1, 2, 3.

所以我需要一个向量[1,2,3,1,2,1,1,2,1,2,3]。但由于部分的数量远大于3,我想建立一个通用的矢量:

1 : noSections

1 : noSections - 1

...

1

...

1 : noSections

我该怎么做?

1 个答案:

答案 0 :(得分:3)

您可以使用arrayfun,这对您的工作非常好。

cell2mat(arrayfun(@(x)1:x, [n:-1:1 2:n], 'UniformOutput', false))

说明:

[n:-1:1 2:n] % create the vector for the last element of each row, i.e. the vector [n, n-1, ..., 1, 2, ..., n]

@(x)1:x % Generate a 1:x vector for each x, this is done for each element of the previous vector

对于你的例子:

n = 3;
cell2mat(arrayfun(@(x)1:x, [n:-1:1 2:n], 'UniformOutput', false))

ans =

     1     2     3     1     2     1     1     2     1     2     3