## how to shift arrays to the left

### mary (view profile)

on 30 Jan 2013
Accepted Answer by Matt J

### Matt J (view profile)

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

### Matt J (view profile)

on 30 Jan 2013

```circshift(a,[0,-1])
```

Matt J

### Matt J (view profile)

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

### mary (view profile)

on 30 Jan 2013

thanx indeed

#### Join the 15-year community celebration.

Play games and win prizes!

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