代码之家  ›  专栏  ›  技术社区  ›  Andrew Bannerman

用于环形非重叠研磨块尺寸

  •  0
  • Andrew Bannerman  · 技术社区  · 6 年前

    我正在处理一个问题,我在不同的块宽度上运行计算,比如说8、16、32块….一千零二十四

    所以让我们看看宽度为8的块是什么样子:

    size_8 = collect(1:8:1024)
    
    julia> print(size_8)
    [1, 9, 17, 25, 33, 41, 49, 57, 65, 73, 81, 89, 97, 105, 113, 121, 129, 137, 145, 153, 161, 169, 177,
     185, 193, 201, 209, 217, 225, 233, 241, 249, 257, 265, 273, 281, 289, 297, 305, 313, 321, 329, 337,
     345, 353, 361, 369, 377, 385, 393, 401, 409, 417, 425, 433, 441, 449, 457, 465, 473, 481, 489, 497,
     505, 513, 521, 529, 537, 545, 553, 561, 569, 577, 585, 593, 601, 609, 617, 625, 633, 641, 649, 657,
     665, 673, 681, 689, 697, 705, 713, 721, 729, 737, 745, 753, 761, 769, 777, 785, 793, 801, 809, 817,
     825, 833, 841, 849, 857, 865, 873, 881, 889, 897, 905, 913, 921, 929, 937, 945, 953, 961, 969, 977,
     985, 993, 1001, 1009, 1017]
    

    第一个街区是1:9,第二个街区是9:17,第三个街区是17:25,以此类推。

    接下来,我希望使用i迭代器将这些块宽度放置在for循环中。我不希望硬编码像 size_8[i]:size_8[i]+8 这是因为我希望循环遍历 n, 8,16,32.... 1024 我不想把一大堆8码,16码,32码…大小为1024个矢量。我宁愿循环遍历n的每个块大小值。

    如果我们采取滚动循环,我们可以:

    n=8 # set width of rolling window
    for i = n:size(something,1) 
    out[i] = mean(something[i-n+1:i] 
    end 
    

    这是窗户的宽度 8 ,这是为了增大研磨块的尺寸 i (i+1) 正如我将要描述的,需要增加 i 通过 每次:

    所以在上面的问题中我需要增加 每次8对1(我现在意识到可能不可能)从位置开始 1 并将上窗口增加 每次我们都有:

    做点什么,说刻薄的话 1:9 range, 9:17 range, 17:25 …等等-非重叠垫块。

    任何人都知道我如何在不硬编码向量范围和使用 仅限迭代器?我试过对硬编码块进行编码,但限制太大了。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Andrew Bannerman    6 年前

    我想我可以在循环中创建一个动态块大小:

    block_size = [8,16,32,64,128,256,512,1024]
    
     for i in 1:length(block_size)
        size = collect(1:block_size[i]:length(something))
        print(size)
        end
    

    现在我可以为任何N:

    size[i]:size[i]+n