## how to shift arrays to the left

on 30 Jan 2013

### 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?

### 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

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