Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

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?

0 Comments

mary

Tags

Products

No products are associated with this question.

1 Answer

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

2 Comments

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

Matt J

Contact us