Как сдвинуть элементы массива влево, не используя циклы в matlab? - PullRequest
7 голосов
/ 11 апреля 2011

У меня есть массив фиксированного размера в Matlab.Когда я хочу вставить новый элемент, я делаю следующее:

  1. Чтобы освободить место, первый элемент массива будет перезаписан
  2. Каждый другой элемент будет смещен в новом месте index-1--left shift.
  3. Новый элемент будет вставлен в место последнего элемента, который становится пустым при смещении элементов.

Я бы хотел сделать это без использования циклов.

Ответы [ 3 ]

8 голосов
/ 11 апреля 2011

Я не уверен, что понимаю ваш вопрос, но я думаю, что вы имеете в виду это:

A = [ A(1:pos) newElem A((pos+1):end) ]

Это вставит переменную (или массив) newElem после позиции pos в массиве A.

Дайте мне знать, если это работает для вас!

[Edit] Хорошо, похоже, что вы на самом деле просто хотите использовать массив в качестве регистра сдвига.Вы можете сделать это следующим образом:

A = [ A(2:end) newElem ]

Это займет все элементы от второго до последнего из A и добавит вашу переменную (или массив) newElem в конец.

6 голосов
/ 02 мая 2011

Функция circshift является еще одним решением:

B = circshift(A,shiftsize) циклически сдвигает значения в массиве, A, на shiftsize элементов.shiftsize - это вектор целочисленных скаляров, где n -й элемент задает величину сдвига для n-го измерения массива A.Если элемент в shiftsize является положительным, значения A сдвигаются вниз (или вправо).Если оно отрицательное, значения A сдвигаются вверх (или влево).Если это значение равно 0, значения в этом измерении не смещаются.

Пример:

Круговое смещение значений первого измерения вниз на 1, а значений второго измерения влево на1.

A = [ 1 2 3;4 5 6; 7 8 9]

A =
    1     2     3
    4     5     6
    7     8     9

B = circshift(A,[1 -1]);
B  = 
    8     9     7
    2     3     1
    5     6     4
1 голос
/ 25 февраля 2016

просто удалите первое значение в массиве и добавьте новое в конце.

A(1) = []
A = [A newValue] 

Числовой пример

A = [1 2 3 4];
A(1) = [];
A = [A 5];

В результате A имеет значения [2, 3, 4, 5]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...