2016-05-18 13 views
1

私は上記のコードのランダムなしで次のコードMatlabでスライディングウィンドウ操作を行うには?

x=randi([1 150],1,400); 
d=max(x); 
m=numel(x); 
y=zeros(d,1); 
p=zeros(d,d); 
for k=1:m-1 
y(x(k))=y(x(k))+1; 
p(x(k),x(k+1))=p(x(k),x(k+1))+1; 
end 
p=bsxfun(@rdivide,p,y); 
p(isnan(p)) = 0; 
j=prod(p(p~=0)); 
[~,~,idx] = unique(x); 
q=prod(hist(idx,1:max(idx))/numel(x)); 
s=log(j); 
l=log(q); 
g=s+l 

を持っています。シーケンス長400で1から150まで生成されます。最後に出力gを得ています。その後、第一の要素をスキップシーケンスの

x=[5,96,96,55,55,65,65,65,12,12,6,7,9,9,9,31,31,14,26,26,26,101,101,145,145,...] 

ので、コードはO/Pシーケンス全体のための出力を与えられたが、私はサイズ10のウィンドウをスライドさせるための出力をしたい、すなわちされたコードによって生成されたシーケンス

[5,96,96,55,55,65,65,65,12,12], 

とウィンドウサイズが

のために次の、その後

[96,96,55,55,65,65,65,12,12,6], 

すなわち、同じまま必要がありますので、次の要素を追加します

同様に最後まで、それを行う方法。

答えて

0

forループを使用する簡単な方法の1つはコードです。

x=randi([1 150],1,12) 

m=numel(x); 
N=10; %Window length 

for n=0:m-N; 

    y=x(1+n:N+n) 

end 

完全なコードは以下のとおりです。

xr=randi([1 150],1,20) 

z=numel(xr); 
N=10; %Window length 


gAll=zeros(1,z-N+1); 

for n=0:z-N; 

    x=xr(1+n:N+n) 

    d=max(x); 
    m=numel(x); 
    y=zeros(d,1); 
    p=zeros(d,d); 
    for k=1:m-1 
    y(x(k))=y(x(k))+1; 
    p(x(k),x(k+1))=p(x(k),x(k+1))+1; 
    end 
    p=bsxfun(@rdivide,p,y); 
    p(isnan(p)) = 0; 
    j=prod(p(p~=0)); 
    [~,~,idx] = unique(x); 
    q=prod(hist(idx,1:max(idx))/numel(x)); 
    s=log(j); 
    l=log(q); 
    g=s+l 

    gAll(n+1)=g; 

end 

plot(gAll) 
+0

私は試みましたが、私は答えを得ていませんでした。私が直接実行できるように、コード全体を投稿することはできますか? –

+0

私はgAllが-22より大きい場合は赤色でなければならず、-22より小さい場合は青色でなければならないことを数値で求めたい –

+0

これはあなたの質問とは関係ありません。このサイトで別の質問をすることができます。 – KKS

関連する問題