Vector
はVector
であり、長さはそれぞれW
です。これらの最後のベクトルには、0〜150,000の整数が5のステップで含まれますが、空にすることもできます。私はこれらのベクトルのそれぞれについて経験的なcdfを計算しようとしています。 CDFはj >= maximum(v)
ために1に等しくなり、時にはこのmaximum(v)
150,000よりもはるかに低くなるので、私はしかし、これジュリアのループが途切れる
cdfdict = Dict{Tuple{Int,Int},Float64}()
for i in 1:length(W)
v = W[i]
len = length(v)
if len == 0
pcdf = 1.0
else
for j in 0:5:150_000
pcdf = length(v[v .<= j])/len
cdfdict[i, j] = pcdf
end
end
end
ようなすべてのベクターおよびすべての整数を超える反復これらのCDFを計算することができ、このアプローチは非効率的です。
私の質問は:どのように私はj > maximum(v)
ためj
ループの勃発が、それでもj
秒の残りのためpcdf = 1.0
を割り当て条件を含めることができますか?
j > maximum(v)
のときにはbreak
を含めるようにしましたが、これはもちろん、残りの部分がループするのを停止します。j
また、私はループを壊して、後でcdfdict
に見つからないキーのために1.0
にアクセスするためにget!
を使用することができますが、それは私が探しているものではありません。
時期尚早の最適化は諸悪(クヌース??)のルートですあなたはそれを壊すことは関係ありません。 –
これはループの後に 'get!'を使うのとほぼ同じです... – amrods
私は@ TasosPapastylianouの解決策が最高だと思います。しかし、あなたはジュリアにどのくらいの速いループがあるかを過小評価しているかもしれません。 0から150,000を5秒でループし、あらかじめ設定された値1.0を入力すると、時間がかかります。 –