MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

# how to shift arrays to the left

Asked by mary on 30 Jan 2013

if i have

a=[0 0 0 0 0 0 0 0]

a(1,8)=5;

shifting a will results in :

a=[0 0 0 0 0 0 5 0]

how can i do that?

## Products

No products are associated with this question.

Answer by Matt J on 30 Jan 2013
```circshift(a,[0,-1])
```

Matt J on 30 Jan 2013

If you always want the vacated edge of the matrix to be filled with zeros, you can use my noncircshift utility with the same syntax

```function [B,src_indices,dest_indices]=noncircshift(A,offsets)
%Like circshift, but shifts are not circulant. Missing data are filled with
%zeros.
%
%  [B,src_indices,dest_indices]=noncirchift(A,offsets)
%
%B is the resulting array and the other outputs are such that
%
%  B(dest_indices{:})=A(src_indices{:})
```
```siz=size(A);
N=length(siz);
```
```if length(offsets)<N
offsets(N)=0;
end
```
```B=zeros(siz);
```
```indices=cell(3,N);
```
```for ii=1:N
```
`      for ss=[1,3]`
`       idx=(1:siz(ii))+(ss-2)*offsets(ii);`
```        idx(idx<1)=[];
idx(idx>siz(ii))=[];```
`       indices{ss,ii}=idx;`
```      end
end```
```src_indices=indices(1,:);
dest_indices=indices(3,:);
```
```B(dest_indices{:})=A(src_indices{:});
```
mary on 30 Jan 2013

thanx indeed