【问题标题】:Vectorized loop in MatlabMatlab中的矢量化循环
【发布时间】:2025-12-15 10:30:02
【问题描述】:

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

我必须将我的代码分成不同的部分并按以下方式运行,因为有些矩阵是从左到右构建的,有些是通过反向归纳从右到左构建的。例如,如果我将它分成 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:noSections, 1:noSections-1, 1:noSections-2, ..., 1:1, 1:2, 1:3 , ..., 1:noSections]。

标签: matlab loops for-loop vector vectorization


【解决方案1】:

您可以使用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

【讨论】: