Size: a a a

Язык программирования Julia / Julia programming language

2020 January 25

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Функция правильно рассчитала 2-ю группу, но в 1-ю и 3-ю не попали первые значение (1 и 11 соответственно)
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
function partition(arr; threshold = 2.0)
 reduce(a, init = [Float64[]]) do acc, x
   local subarr = last(acc)
   if isempty(subarr) || abs(x - last(subarr)) > threshold
       push!(acc, [x])
   else
       push!(subarr, x)
   end
   acc
 end |> x -> filter(i -> length(i) > 1, x)
end

a = [100, 38, 1, 1.5, 2, 1, 6, 34, 35, 34.5, 10,  23, 11, 11.5, 12, 11.8, 11.4]
b = partition(a)
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
julia> b
3-element Array{Array{Float64,1},1}:
[1.0, 1.5, 2.0, 1.0]          
[34.0, 35.0, 34.5]            
[11.0, 11.5, 12.0, 11.8, 11.4]
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Логичный Лесник
Круто, только единственное - туда не попадают первые элементы группы сейчас.
не надо писать код ночью 🤓
источник

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Roman Samarev
function partition(arr; threshold = 2.0)
 reduce(a, init = [Float64[]]) do acc, x
   local subarr = last(acc)
   if isempty(subarr) || abs(x - last(subarr)) > threshold
       push!(acc, [x])
   else
       push!(subarr, x)
   end
   acc
 end |> x -> filter(i -> length(i) > 1, x)
end

a = [100, 38, 1, 1.5, 2, 1, 6, 34, 35, 34.5, 10,  23, 11, 11.5, 12, 11.8, 11.4]
b = partition(a)
Огонь! Это как раз то, что нужно. Спасибо!
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Все это выглядит как хаскель 🤓
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Логичный Лесник
Огонь! Это как раз то, что нужно. Спасибо!
ну и возможные изменения. В условии abs(x - last(subarr)) > threshold заменить last на first, или mean и пр.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
Все это выглядит как хаскель 🤓
у меня опыт минимизации кода на Ruby 🙂
источник

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Roman Samarev
у меня опыт минимизации кода на Ruby 🙂
А мне придётся переписать всё на Си в императивном варианте.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
Все это выглядит как хаскель 🤓
Я думаю, что обычный for в данном случае будет выглядеть проще и даже будет немного быстрее.
источник

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Андрей Оськин
Я думаю, что обычный for в данном случае будет выглядеть проще и даже будет немного быстрее.
Ну там почти что императивный вариант, так как используется push!
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Андрей Оськин
Я думаю, что обычный for в данном случае будет выглядеть проще и даже будет немного быстрее.
чтобы было быстрее, я думаю, что надо не новые массивы генерировать, а сделать ещё один массив (или два) с индексами разметки начала и окончания последовательности.
источник

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Кстати говоря на хаскеле код был бы сложнее, так как мы не можем на месте изменять список.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Я скорее имел в виду, что в этом случае фильтр можно будет запихнуть внутрь цикла, что уменьшит количество аллокаций.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Как следствие - повысит скорость.
источник

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Андрей Оськин
Я скорее имел в виду, что в этом случае фильтр можно будет запихнуть внутрь цикла, что уменьшит количество аллокаций.
Это да, Си-шный вариант, как раз примерно таким и будет.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
А зачем сишный, если можно написать на Джулии? 😊
источник

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Но с for будет немного более многословно.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Андрей Оськин
Я скорее имел в виду, что в этом случае фильтр можно будет запихнуть внутрь цикла, что уменьшит количество аллокаций.
фильтр там нужен, чтобы лишнее условие не писать. Элементы для пропусков фильтруются как массивы с одним элементом
источник

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Андрей Оськин
А зачем сишный, если можно написать на Джулии? 😊
У меня просто основной продакшен код на Си, а с джулией я экспериментирую.
источник