Quickly create a vector of ones and zeros

133 ビュー (過去 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 ExchangeGet Started with MATLAB についてさらに検索

製品


Translated by