Arrays julia中变量的数组结尾
我想将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
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)