Quickly create a vector of ones and zeros

360 ビュー (過去 30 日間)
Raldi
Raldi 2014 年 5 月 5 日
回答済み: Khayalvili Ramu 2020 年 3 月 18 日
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
Youssef Khmou 2014 年 5 月 5 日
vectorization is possible :
N=10;
vec=zeros(N,1);
positions=[2:4];
vec(positions)=1;
  4 件のコメント
Jos (10584)
Jos (10584) 2019 年 2 月 27 日
positions = 2:4;
would do, so the square brackets ARE superfluous ...
Innocent Okoloko
Innocent Okoloko 2019 年 2 月 27 日
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)]

サインインしてコメントする。

その他の回答 (4 件)

Matt J
Matt J 2014 年 5 月 5 日
編集済み: Matt J 2014 年 5 月 5 日
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
Innocent Okoloko 2019 年 2 月 26 日
Faster coding
x=[zeros(1,10)];
x(2:4)=1
  2 件のコメント
Stephen23
Stephen23 2019 年 2 月 26 日
Note that the square brackets are superfluous, and likely slow down the code:
Jos (10584)
Jos (10584) 2019 年 2 月 27 日
x = zeros(1,10)
will give the same result as your code, so the square brackets ARE superfluous ...

サインインしてコメントする。


Jos (10584)
Jos (10584) 2019 年 2 月 26 日
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
Khayalvili Ramu 2020 年 3 月 18 日
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

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!

Translated by