我正在解决一个问题,我在不同的块宽度上运行计算,比如8,16,32 .... 1024
块因此,让我们看看宽度为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
的每个值我不想编码一大堆size_8,size_16,size_32 .... size_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}}:
所以现在在上面的问题中,我需要从位置i
开始每次增加1
8比1(我现在意识到可能无法实现)并且还将上部窗口增加{每次{1}}我们都有:
做某事,说8
上的意思....等等 - 不重叠的块。
如果不对矢量中的范围进行硬编码并仅使用1:9 range, 9:17 range, 17:25
迭代器,任何人都有任何想法可以实现吗?我曾尝试对硬编码块进行编码,但限制性太强。
答案 0 :(得分:0)
我想我可以在循环中创建一个动态的block_size:
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