🔴 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 (тесты).