Size: a a a

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

2020 November 10

AM

Ali Meres in Язык программирования Julia / Julia programming language
Thanks a lot
источник

P

PS in Язык программирования Julia / Julia programming language
Ali Meres
Hi! I have a question. Is there a book available for simulation with Julia? I would like to decide to use Arena, GPSS or Julia for an queue analysis. Please, do you know if there are other material rather than JuliaSim documentation? Regards
Hi, you might be interested in hash.ai (multiagent simulations). No Julia though
источник
2020 November 11

УМ

Убийца Мамонтов... in Язык программирования Julia / Julia programming language
В MIT обучили нейросеть, которая определяет наличие коронавируса по звуку кашля. В том числе у бессимптомных больных, которые специально кашляют. Определило коронавирус у 100% больных без симптомов, но с позитивным тестом.

Разделять бессимптомных больных от здоровых научили на десятках тысяч записей кашля, отправленных добровольцами. Сейчас делают приложение, которое в случае одобрения FDA станет быстрым, бесплатным и неинвазивным способом тестирования
источник

АО

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

УМ

Убийца Мамонтов... in Язык программирования Julia / Julia programming language
как красиво разделить одномерный массив на N равных отрезков + остаток?
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Убийца Мамонтов
как красиво разделить одномерный массив на N равных отрезков + остаток?
источник

УМ

Убийца Мамонтов... in Язык программирования Julia / Julia programming language
воу, круть. спасибо)
источник

VG

Viktor G. in Язык программирования Julia / Julia programming language
Нет ли случайно в Julia функции, обратной zip, что-то типа:
function unzip(vec::Vector{T}) where T <: Union{Tuple, NamedTuple}
   map(x->getfield.(vec, x), fieldnames(T))
end

ntup = (a=[1,2,3,4], b=[1.,2.,3.,4.])

v = zip(ntup...) |> collect

tup = unzip(v)

tup == Tuple(ntup)
источник

АО

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

collect(zip(v...))
источник

АО

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

VG

Viktor G. in Язык программирования Julia / Julia programming language
ну это такая простая замена StructArrays в том случае, если надо только AOS и SOA конвертировать друг в друга
источник

RS

Roman Samarev in Язык программирования Julia / Julia programming language
Viktor G.
Нет ли случайно в Julia функции, обратной zip, что-то типа:
function unzip(vec::Vector{T}) where T <: Union{Tuple, NamedTuple}
   map(x->getfield.(vec, x), fieldnames(T))
end

ntup = (a=[1,2,3,4], b=[1.,2.,3.,4.])

v = zip(ntup...) |> collect

tup = unzip(v)

tup == Tuple(ntup)
foldl(v; init = [[],[]]) do dict, v
 for i in eachindex(v)
    push!(dict[i], v[i])
  end
  dict
end

Как-то так, но некрасиво…..
источник
2020 November 12

VG

Viktor G. in Язык программирования Julia / Julia programming language
Проблема кольцевой зависимости:
1) есть некая структура Foo, которая определена в foo.jl
2) есть несколько форматов файлов для её сохранения и чтения, которые определены в txt.jl, binary.jl, otherformat.jl и т.д.

Возникает проблема: для структуры должны быть определены два метода: read и save, внутри которых, в зависимости от расширения, вызывается нужный метод из txt.jl, binary.jl или other.jl, но и эти методы в свою очередь должны знать о структуре Foo.

То есть, имена (типов и функций) из первого файла используются во втором файле - и наоборот, имена из второго файла используются в первом файле. Внутри пакета файлы подключаются последовательно, поэтому:

include("foo.jl") - на данный момент объявлены функции read и save, в них вызываются функции, которые ещё не были определены

include("txt.jl")
include("binary.jl")
include("otherformat.jl")
- на данный момент все функции определены, но все равно как-то не по себе...

Я понимаю, что для Julia на уровне отдельных файлов (если не выносить по отдельным модулям) это не является проблемой и все должно запуститься. Но все равно, как лучше решать подобные кольцевые зависимости? Выносить их в шаблонные параметры, как сделано с форматами файлов в FileIO?
источник

АО

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

Кольцевая зависимость может возникнуть если все это счастье по модулям отдельным разбросано
источник

АО

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

АО

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

VG

Viktor G. in Язык программирования Julia / Julia programming language
могут отличаться, например:
function save(f::Foo)
   ...
   savetxt(f)
  ...
end
источник

АО

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

VG

Viktor G. in Язык программирования Julia / Julia programming language
Да, точно, но так ли это важно?
источник

АО

Андрей Оськин... in Язык программирования Julia / Julia programming language
Мммм... Не знаю ответа на этот вопрос.

Но вот какая у меня картинка в голове (и до сих пор она работала). Возможно, что конкретная реализация тех или иных фич сделана как-то по другому, но до тех пор пока эта картинка работает, ей можно пользоваться 😊

1. include вообще не важен с точки зрения языка, зависимостей и тому подобного. Инструкция include просто напросто буквально вставляет кусок кода, который написан в другом файле. То есть с точки зрения языка когда ты исполняешь какой-либо скрипт ты всегда исполняешь один (возможно огромный) файл. Поэтому о зависимостях между кусками кода надо мыслить именно в смысле "после того как код уже вставлен".

2. Когда скрипт исполняется, то опять же перед исполнением любого куска кода, файл читается целиком и все определения считываются заранее. То есть не важно, в каком порядке у вас идут определения функций f1 и f2 - к моменту исполнения они все уже будут прочитаны и идентифицированы Julia.

3. Код любой функции компилируется JIT (just in time), то есть только тогда, когда он непосредственно вызывается. Так как к этому моменту (см. выше) все include уже включены и все функции идентифицированы, то сфейлится функция может только в единственном случае - если то, что вызывается внутри в принципе не определено нигде.
источник