Matlab создает новый массив значений без цикла - PullRequest
2 голосов
/ 09 марта 2020

В Matlab я не знаю лучшего способа объяснить это, за исключением примера. Допустим, у меня есть массив с именем tStart и длиной tDuration:

tStart = [3,8,15,20,25];
tDuration = 2;

Есть ли способ получить новый массив, такой, что он будет:

[3,4,5,8,9,10,15,16,17,20,21,22,25,26,27]

Поэтому я хочу использовать исходный массив tStart, затем создать новый массив с начальным значением, а затем следующие соответствующие значения для длины tDuration.

Если я сделаю [tStart(1:end)+tDuration], я получу массив конечных значений, но как я могу получить начало, конец и все значения между ними?

Если я [tStart(1:end):tStart(1:end)+tDuration] получу сообщение об ошибке.

Любая помощь в способе сделать это без AL oop будет принята с благодарностью.

1 Ответ

5 голосов
/ 09 марта 2020

Я бы использовал неявное расширение MATLAB, изменение его формы и упорядочение 2d-массивов.

Сначала создайте 2d-массив, содержащий нужные значения из tStart:

tStart = [3,8,15,20,25];
tDuration = 2;

tDurAdd = [0:tDuration].';  % numbers to add to tStart
tArray = tStart + tDurAdd;

This дает нам

tArray =

    3    8   15   20   25
    4    9   16   21   26
    5   10   17   22   27

Это правильные значения, теперь нам просто нужно преобразовать их в вектор строки:

tResult = reshape(tArray, 1, []);

Окончательный массив:

tResult =

    3    4    5    8    9   10   15   16   17   20   21   22   25   26   27

Конечно, все это можно сделать в одну строку:

tResult = reshape(tStart + [0:tDuration].', 1, []);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...