2017-02-23 78 views
0

Очень простой вопрос, но я не нашел ничего ...Векторизованное петля в Matlab

Я должен разделить свой код в различных разделах и запустить его следующим образом, поскольку некоторые матрицы строятся слева направо и некоторые справа налево с помощью обратной индукции. Например, если я разделить его на 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 

Как бы мне это сделать?

+0

в одном предложении: Я хочу построить вектор [1: noSections, 1: noSections-1, 1: noSections -2, ..., 1: 1, 1: 2, 1: 3, ..., 1: noSections]. – LenaH

ответ

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 
+0

Супер, это сделает эту работу, спасибо большое! – LenaH