🔴 Julia
Быстрый язык для науки: типы, векторизация, циклы, функции, множественная диспетчеризация.
Шпаргалки · Программирование · #julia #data-science #scientific
IDE и запуск
VS Code + расширение Julia, Pluto.jl / Jupyter (ноутбуки). julia file.jl, REPL julia. Пакеты в REPL: ] затем add DataFrames, или using Pkg; Pkg.add("X").
Типы данных
n = 1; x = 1.5; s = "a"; c = 'c'; b = true; z = nothing
v = [1, 2, 3] # вектор
m = [1 2; 3 4] # матрица
d = Dict("a" => 1)
t = (1, "a") # кортеж
r = 1:5 # диапазон
struct Point; x::Float64; y::Float64; end
typeof(1) # Int64
Индексы с 1. Типы можно указывать: x::Int = 1.
Операторы
+ - * / ^ % ÷ (целое деление), == != < >, && || !, .+ .* .^ (поэлементно, «broadcast»), ∈ / in, |> (pipe), \ (решить систему).
Циклы
for i in 1:3 println(i) end
for (i, x) in enumerate(v) end
while cond end
[x^2 for x in 1:5 if isodd(x)]
Функции
add(a, b=0) = a + b
function fact(n) n <= 1 ? 1 : n * fact(n - 1) end
sq = x -> x^2
area(s::Circle) = pi * s.r^2 # метод по типу аргумента
Встроенные
println, length, sum, mean (Statistics), sort, push!, map, filter, reduce, zeros, rand, parse(Int, "5"). Восклицательный знак: функция изменяет аргумент.
Асинхронность и параллелизм
t = @async begin sleep(1); 42 end; fetch(t)
Threads.@threads for i in 1:100 end
using Distributed; addprocs(4)
Коллекции
Vector, Matrix, Dict, Set, Tuple, NamedTuple; push!, pop!, get(d, k, default).
Пакеты по задачам
DataFrames.jl (таблицы), Plots.jl, Makie.jl (графики), Flux.jl (нейросети), DifferentialEquations.jl, JuMP.jl (оптимизация), CSV.jl, HTTP.jl, Test (тесты).