Julia: Difference between revisions
No edit summary |
No edit summary |
||
(22 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Julia is a numerical computation and general purpose high-level programming language. | Julia is a numerical computation and general purpose high-level programming language. | ||
It's standout feature is its performance which allows libraries to be written in Julia directly. | It's standout feature is its performance which allows libraries to be written in Julia directly. | ||
In contrast, many libraries in [[R]] and [[Python]] are written in [[C]] or [[C++]] for performance purposes and accessed using Rcpp or Cython. | In contrast, many libraries in [[R]] and [[Python]] are written in [[C (programming language)]] or [[C++]] for performance purposes and accessed using Rcpp or Cython. | ||
If necessary, you can still interface with other languages. | If necessary, you can still interface with other languages. | ||
See [https://en.wikibooks.org/wiki/Introducing_Julia Introducing Julia] for a comprehensive guide on how to program in Julia. | See [https://en.wikibooks.org/wiki/Introducing_Julia Introducing Julia] for a comprehensive guide on how to program in Julia. | ||
Line 14: | Line 13: | ||
Most items can be accessed from the Atom control palette <code>Ctrl + Shift + P</code><br> | Most items can be accessed from the Atom control palette <code>Ctrl + Shift + P</code><br> | ||
Shortcuts: | Shortcuts: | ||
* <code>Ctrl + Enter</code> Evaluate current selection | * <code>Ctrl + Enter</code> Evaluate current selection/section. | ||
* <code>Shift + Enter</code> Evaluate current section and jump to next. | * <code>Shift + Enter</code> Evaluate current selection/section and jump to next. | ||
== | ==Usage== | ||
===Package Management=== | ===Package Management=== | ||
[https://www.simonwenkel.com/2018/10/06/a-brief-introduction-to-package-management-with-julia.html Guide] | [https://www.simonwenkel.com/2018/10/06/a-brief-introduction-to-package-management-with-julia.html Guide] | ||
Initializing a new project | ====Initializing a new project==== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
cd project_folder | cd project_folder | ||
Line 28: | Line 27: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Loading an existing project | ====Loading an existing project==== | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
cd project_folder | cd project_folder | ||
julia | julia | ||
using Pkg; | using Pkg; | ||
Pkg.activate( | Pkg.activate(@__DIR__); | ||
Pkg.instantiate(); | Pkg.instantiate(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===String Interpolation=== | |||
====Updating an existing project==== | |||
If the dependencies in <code>Project.toml</code> have been updated, you will need to run | |||
<code>Pkg.resolve()</code> to install new packages and update your local <code>Manifest.toml</code> | |||
<syntaxhighlight lang="bash"> | |||
using Pkg; | |||
Pkg.activate(@__DIR__); | |||
Pkg.resolve(); | |||
</syntaxhighlight> | |||
To update the your dependencies, run <code>Pkg.update()</code> | |||
<syntaxhighlight lang="bash"> | |||
using Pkg; | |||
Pkg.activate(@__DIR__); | |||
Pkg.update(); | |||
</syntaxhighlight> | |||
====Other Pkg Commands==== | |||
You can see all the commands by typing <code>?</code> in the package manager. | |||
* <code>add [packagename]</code> Add a package | |||
* <code>update [packagename]</code> Update a specific package or all packages | |||
* <code>remove [packagename]</code> Remove a package | |||
* <code>status</code> Show the current Pkg directory and installed packages | |||
===Basics=== | |||
====Functions==== | |||
You can chain functions using the pipe operator <code>|></code>. This is similar to <code>%>%</code> in [[R]] or <code>|></code> in [[F_sharp| F#]] | |||
<syntaxhighlight lang="julia> | |||
a = [1,2,3]; | |||
// Equivalent to sum(a) | |||
b = a |> sum | |||
</syntaxhighlight> | |||
====Strings==== | |||
=====String Interpolation===== | |||
<syntaxhighlight lang="julia"> | <syntaxhighlight lang="julia"> | ||
"Variable x is $x, y is $y, and x+y is $(x+y)" | "Variable x is $x, y is $y, and x+y is $(x+y)" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
===Arrays=== | ====String Concatenation==== | ||
Julia uses <code>*</code> to concatenate strings. | |||
You will get an error if you use <code>+</code>. | |||
<syntaxhighlight lang="julia"> | |||
"a"*"b" | |||
</syntaxhighlight> | |||
====Arrays==== | |||
[[https://en.wikibooks.org/wiki/Introducing_Julia/Arrays_and_tuples Full details]] | [[https://en.wikibooks.org/wiki/Introducing_Julia/Arrays_and_tuples Full details]] | ||
<syntaxhighlight lang="julia"> | <syntaxhighlight lang="julia"> | ||
Line 51: | Line 91: | ||
myArr = Array{Float64,1}(undef, 3) | myArr = Array{Float64,1}(undef, 3) | ||
// Convert | // Convert a collection to an array with collect | ||
myArr = collect(1:3) | myArr = collect(1:0.5:3) | ||
// myArr == [1.0,1.5,2.0,2.5,3.0] | |||
// Reference copy | // Reference copy | ||
Line 100: | Line 141: | ||
==Graphics== | |||
{{Main|Graphics in Julia}} | {{Main|Graphics in Julia}} | ||
You can use MeshCat.jl to create visualizations to view in a web browser.<br> | You can use MeshCat.jl to create visualizations to view in a web browser.<br> | ||
Line 108: | Line 149: | ||
MeshCat.jl is built using [https://github.com/JuliaGizmos/WebIO.jl WebIO.jl].<br> | MeshCat.jl is built using [https://github.com/JuliaGizmos/WebIO.jl WebIO.jl].<br> | ||
==Machine Learning== | |||
{{Main|Machine Learning in Julia}} | {{Main|Machine Learning in Julia}} | ||
See [[Flux]] and [[Knet.jl]] | |||
==Object Oriented Programming== | |||
Julia is a [https://en.wikipedia.org/wiki/Multiple_dispatch Multiple Dispatch] language.<br> | Julia is a [https://en.wikipedia.org/wiki/Multiple_dispatch Multiple Dispatch] language.<br> | ||
You can use a <code>struct</code> in place of classes and define | You can use a <code>struct</code> in place of classes and define methods which use your struct as a parameter.<br> | ||
You can find all definitions of a function using the <code>methods</code> function. | |||
For example: | For example: | ||
<syntaxhighlight lang="julia"> | <syntaxhighlight lang="julia"> | ||
Line 141: | Line 183: | ||
supertype(Int64) | supertype(Int64) | ||
# Check if a is a subtype of b with <: | # Check if a is a subtype of b with <: | ||
# This is the same symbol for creating a subtype | # This is the same symbol for creating a subtype of an abstract type | ||
# E.g. mutable struct myNum <: Number | # E.g. mutable struct myNum <: Number | ||
Int64 <: Number | Int64 <: Number | ||
Line 157: | Line 199: | ||
It includes convenience features including NN layers, activation functions, and an automatic differentiation system. | It includes convenience features including NN layers, activation functions, and an automatic differentiation system. | ||
See [[Machine Learning in Julia]] for more details on how to use Flux. | See [[Machine Learning in Julia]] for more details on how to use Flux. | ||
===Latexify.jl=== | |||
[https://github.com/korsbo/Latexify.jl Link]<br> | |||
Prints out a latex string for any Julia expression or value.<br> | |||
Very useful for printing out matrices to insert into Latex documents. | |||
==References== | |||
{{Reflist}} |