简体   繁体   中英

How to shift elements of an array to the left without using loops in matlab?

I have a fixed sized array in Matlab. When I want to insert a new element I do the following:

  1. To make room first array element will be overwritten
  2. Every other element will be shifted at new location index-1 ---left shift.
  3. The new element will be inserted at the place of last element which becomes empty by shifting the elements.

I would like to do it without using any loops.

I'm not sure I understand your question, but I think you mean this:

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

That will insert the variable (or array) newElem after position pos in array A .

Let me know if that works for you!

[Edit] Ok, looks like you actually just want to use the array as a shift register. You can do it like this:

A = [ A(2:end) newElem ]

This will take all elements from the 2nd to the last of A and added your newElem variable (or array) to the end.

The circshift function is another solution:

B = circshift(A,shiftsize) circularly shifts the values in the array, A , by shiftsize elements. shiftsize is a vector of integer scalars where the n -th element specifies the shift amount for the n -th dimension of array A . If an element in shiftsize is positive, the values of A are shifted down (or to the right). If it is negative, the values of A are shifted up (or to the left). If it is 0, the values in that dimension are not shifted.

Example:

Circularly shift first dimension values down by 1 and second dimension values to the left by 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 

simply, remove the first value in the array and append the new one at the end.

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

Numeric example

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

The result is A having values [2, 3, 4, 5]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM