Arrays julia中变量的数组结尾

Arrays julia中变量的数组结尾,arrays,julia,Arrays,Julia,我想将Julia中的数组a切片成一个循环,这样它就被分成n个样本块。数组nsamples的长度不是n的倍数,因此最后一步会更短 我尝试使用三元运算符检查跨步的大小是否大于数组的长度: for i in 0:n:nsamples-1 end_ = i+n < nsamples ? i+n : end window = a[i+1:end_] end 0:n:nsamples-1中的i的 结束=i+n

我想将Julia中的数组
a
切片成一个循环,这样它就被分成
n
个样本块。数组
nsamples
的长度不是
n
的倍数,因此最后一步会更短

我尝试使用三元运算符检查跨步的大小是否大于数组的长度:

for i in 0:n:nsamples-1
    end_ = i+n < nsamples ? i+n : end
    window = a[i+1:end_]
end
0:n:nsamples-1中的i的

结束=i+n
这样,如果我超出了数组的大小,
a[i+1:end.
将解析为
a[i+1:end]

但是,在第2行中使用关键字“end”是不可接受的(它也是julia中“控制语句结束”的关键字)

在python中,我可以将
None
分配给
end
,这将解析为
a[I+1:None]
,这将是数组的结尾

我怎样才能避开这个问题?

丑陋的方式:

a=rand(7);
nsamples=7;
n=3;
for i in 0:n:nsamples-1
    end_ = i+n < nsamples ? i+n : :end
    window = @eval a[$i+1:$end_]
    println(window)
end
a=rand(7);
nsamples=7;
n=3;
对于0:n:n示例-1中的i
结束=i+n
更好的解决方案:

for i in 0:n:nsamples-1
    window = i+n < nsamples ? a[i+1:i+n] : a[i+1:end]
    println(window)
end
0:n:nsamples-1中的i的

window=i+n
仅在索引表达式中对
end
关键字进行了这种特殊处理,它的计算结果为被索引维度的最后一个索引。您可以将其放入索引表达式中,例如

for i in 0:n:nsamples-1
    window = a[i+1:min(i+n, end)]
end

或者您可以使用
length(a)
(或者
nsamples
,我想它们是一样的?)而不是
end
,来明确您指的是哪个
end

以简化循环(或者提高性能)最后一个部分窗口可以在循环后处理。建议这样做,因为它通常需要一些特殊处理。在代码中:

i = 0 # define loop variable outside for to retain it after
for i=n:n:length(a)
    println(a[(i-n+1):i])
end
i < length(a) && println(a[(i+1):end])
i=0#在外部为定义循环变量以在之后保留它
对于i=n:n:长度(a)
println(a[(i-n+1):i])
结束
i

最后一位可以用
完成,如果
但是
&&
非常清楚。

请确认,
nsamples
确实是
长度(a)