【问题标题】:How to do sliding window operation in Matlab?Matlab中如何进行滑动窗口操作?
【发布时间】:2016-05-18 04:31:44
【问题描述】:

我有以下代码

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], 

同样到最后,怎么做。

【问题讨论】:

    标签: matlab loops sequence


    【解决方案1】:

    使用 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)
    

    【讨论】:

    • 我试过了,但我没有得到答案,你能把整个代码贴出来让我直接运行吗?
    • 我想知道如果gAll大于-22那么它应该是红色,如果小于-22那么应该是蓝色,怎么做
    • 这与您的问题无关。你可以在这个网站上提出另一个问题。
    • 我在问上面的代码,如果 gAll 大于 -22 那么它应该是红色,如果小于 -22 那么它应该是蓝色
    • ,我现在不能使用 matlab。在这个网站上有很多人可以帮助你。此外,一个主题的一个问题是本站的规则。
    猜你喜欢
    • 2016-06-22
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 2021-06-22
    • 2016-06-12
    • 2022-01-12
    相关资源
    最近更新 更多