У меня есть Vector
от Vector
s различной длины W
. Эти последние векторы содержат целые числа от 0 до 150 000 с шагом 5, но также могут быть пустыми. Я пытаюсь вычислить эмпирический cdf для каждого из этих векторов. Я мог бы вычислить эти CDF итерация каждый вектор и каждое целое число, как этотвырывание петли в Julia
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 будет равна 1 для j >= maximum(v)
и иногда это maximum(v)
будет намного ниже, чем 150,000.
Мой вопрос: как я могу включать в себя условия, нарушающего из j
петли для j > maximum(v)
, но по-прежнему назначает pcdf = 1.0
для остальной части j
с?
Я попытался включить break
, когда j > maximum(v)
, но это, конечно, останавливает цикл от остальной части j
. Кроме того, я могу разбить цикл, а затем использовать get!
для доступа/включения 1.0
для ключей, которые не найдены в cdfdict
позже, но это не то, что я ищу.
вы можете инициализируются ваш cdfdict с '1' в качестве значения по умолчанию, так что даже если вы сломаете это неважно. –
это почти то же самое, что использовать 'get!' После цикла ... – amrods
Я думаю, что решение @ TasosPapastylianou лучше. Но вы можете недооценивать, насколько быстрые петли в Джулии. Зацикливание от 0 до 150 000 на 5 секунд и заполнение заданной величиной 1,0 займет тривиальное количество времени. –