Size: a a a

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

2020 January 24

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Итераторы кстати в base.iterators есть
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Андрей Оськин
Если свой собственный итератор написать - это сойдёт за решение или обязательно нужно из стандартных функций собрать?
Для меня критерием был объем кода
источник

АО

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

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
Итераторы кстати в base.iterators есть
Не нашел я итератор со скользящим окном. Хотя бы в 2 элемента. Для этого случая нужно окно в 3 элемента
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Iszero(length(x)) -> isempty (x)
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Логичный Лесник
Привет, у меня вопрос:
Как проще всего подсчитать скопление (группировку) чисел?
К примеру, у нас есть массив чисел: 1, 1.5, 2, 1, 6, 34, 35, 34.5.
В этом массиве можно выделить группы с небольшим диапазоном:
(1, 1.5, 2, 1) и (34, 35, 34.5). Есть ли какие-нибудь общепринятые подходы кроме перебора?
Заранее, спасибо.
Постановка отсюда
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Андрей Оськин
Iszero(length(x)) -> isempty (x)
Еще init можно типизировать
источник

АО

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

АО

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

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Roman Samarev
Касаемо разбиения последовательности по фрагменты по условию. Например, у Ruby есть множество методов разбиения, включая разбивку со своей функцией разбиения по соседним элементам - https://ruby-doc.org/core-2.7.0/Enumerable.html#method-i-slice_when

Попытался найти эквивалент в Julia и не смог. partition() есть, но только на фиксированное количество. Функцию сравнения ему передать нельзя…. Решение мне удалось сделать, но какое-то оно громоздкое….
a = [1, 1.5, 2, 1, 6, 34, 35, 34.5]
b = reduce(a, init = [[]]) do acc, x
   subarr = last(acc)
   if iszero(length(subarr))
       push!(acc, [x])
   else
       if (x > last(subarr))
           push!(subarr, x)
       else
           push!(acc, [])
       end
   end
   acc
end |> x -> filter(i -> length(i) != 0, x)

# 2-element Array{Array{Any,1},1}:
# [1.0, 1.5, 2.0]  
# [6.0, 34.0, 35.0]
Идея хорошая, но 6 не должна попадать в диапазон.
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Логичный Лесник
Идея хорошая, но 6 не должна попадать в диапазон.
акцент на то, что разница между ними ниже порога? Тогда надо усложнять. Я воспринял задачу как выбрасывание одного не попавшего….
источник

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Roman Samarev
акцент на то, что разница между ними ниже порога? Тогда надо усложнять. Я воспринял задачу как выбрасывание одного не попавшего….
Ага.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Самое дурацкое опять же (я не статистик, не бейте): взять исходную от 1 до end - 1, вычесть из 2:end
источник

KT

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

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
Kirill Tsaregorodtsev
Самое дурацкое опять же (я не статистик, не бейте): взять исходную от 1 до end - 1, вычесть из 2:end
А что, это по-моему самое простое решение:
1. Вычитать из первого (n1) элемента все последующие, пока их разница по модулю в пределах доступного диапазона.
2. Если не по модулю, то это значение становится первым (n1) и так далее по списку.
3. Если есть более одного значения, разница которых допустима, то тогда это и будет группа (диапазон значение).
Спасибо за подсказку! 👍 Я скорее всего так и сделаю!
источник
2020 January 25

RS

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

RS

Roman Samarev in Язык программирования Julia / Julia programming language
при условии, что порог считается между соседними
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
источник

ЛЛ

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

ЛЛ

Логичный Лесник in Язык программирования Julia / Julia programming language
То есть на примере:
a = [100, 38, 1, 1.5, 2, 1, 6, 34, 35, 34.5, 10,  23, 11, 11.5, 12, 11.8, 11.4]
источник