Quickly create a vector of ones and zeros
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?
Accepted Answer
More Answers (4)
N=10;
positions=[2:4];
vec=sparse(1,positions,1,1,N);
and then optionally, if you want the vector in full form,
vec=full(vec),
Innocent Okoloko
on 26 Feb 2019
0 votes
Faster coding
x=[zeros(1,10)];
x(2:4)=1
2 Comments
Stephen23
on 26 Feb 2019
Note that the square brackets are superfluous, and likely slow down the code:
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
Categories
Find more on Get Started with MATLAB in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!