我有以下代码
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
在上面的代码随机没有。生成从1到150,序列长度为400.最后我得到输出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,...]
所以代码给出了整个序列的输出,但是我希望输出大小为10的滑动窗口,即序列的o / p
[5,96,96,55,55,65,65,65,12,12],
然后跳过第一个元素并添加下一个元素,使窗口大小保持不变,即
[96,96,55,55,65,65,65,12,12,6],
然后是
[96,55,55,65,65,65,12,12,6,7],
同样到最后,怎么做。
答案 0 :(得分:0)
使用for循环的一种简单方法是代码。
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)