1.677 views (last 30 days)

Show older comments

My question is if there is a way to create a vector of zeros

vec =

0 0 0 0 0 0 0 0

and specify a position lets say from the second until the fourth element to be ones.

vec =

0 1 1 1 0 0 0 0

Is there a quick way of doing this in Matlab avoiding loops?

Youssef Khmou
on 5 May 2014

vectorization is possible :

N=10;

vec=zeros(N,1);

positions=[2:4];

vec(positions)=1;

Innocent Okoloko
on 27 Feb 2019

You are right. Indeed x=zeros(1,21) will give the same result, makingthe code even shorter and more efficient. I had previously encountered a situation that made me adopt the sqaure brackets and I tried to ransack through my codes, not enough time to do all that now. I guess it is just useful for contantenation e.g.

num=ones(1,5);

num=[num zeros(1,10)]

Innocent Okoloko
on 26 Feb 2019

Faster coding

x=[zeros(1,10)];

x(2:4)=1

Jos (10584)
on 27 Feb 2019

x = zeros(1,10)

will give the same result as your code, so the square brackets ARE superfluous ...

Jos (10584)
on 26 Feb 2019

N = 10 % final length of NewVec

pos1 = 3 % start index of the 1's

n1 = 4 % number of 1's

% one-liner. NewVec should not exist yet

NewVec([N pos1:pos1+n1-1]) = [0 ones(1,n1)]

Khayalvili Ramu
on 18 Mar 2020

close all

clc

K=[1 2 3 6];

P=[1 2 2 2];

S=zeros(1,8);

T=zeros(1,length(S));

for i=0:(length(S)-1)

S(1,i+1)=i;

for k=0:length(K)-1

T(1,k+1)=K(1,k+1);

for l=length(K):length(T)-1

T(1,l+1)=T(1,l-3);

end

end

end

S_temp=zeros(length(S),length(S));

j=0;

for i=0:length(S)-1

j=j+S(1,i+1)+T(1,i+1);

j=mod(j,8);

S([i+1 j+1])=S([j+1 i+1]);

S_temp(i+1,:)=S;

end

KS=zeros(1,length(P));

j=0;

for i=0:length(P)-1

i_temp=mod(i+1,8);

j=mod(j+S(1,i_temp+1),8);

S([i_temp+1 j+1])=S([j+1 i_temp+1]);

t=mod(S(1,i_temp+1)+S(1,j+1),8);

ks=S(1,t+1);

KS(:,i_temp)=ks;

C=bitxor(KS,P);

end

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!