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

New to MATLAB?

how to shift arrays to the left

Asked by mary

mary

on 30 Jan 2013
Accepted Answer by Matt J

Matt J

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

mary

Tags

Products

No products are associated with this question.

1 Answer

Answer by Matt J

Matt J

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

2 Comments

Matt J

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

mary

on 30 Jan 2013

thanx indeed

Matt J

Matt J

Contact us