Julia: Difference between revisions

No edit summary
No edit summary
 
(22 intermediate revisions by the same user not shown)
Line 1: Line 1:
__FORCETOC__


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.


==Basic Usage==
==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 an iterable to an array with collect
// 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===
==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===
==Machine Learning==
{{Main|Machine Learning in Julia}}
{{Main|Machine Learning in Julia}}
See [[Flux]] and [[Knet.jl]]


 
==Object Oriented Programming==
===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 functions which have your struct as a parameter in place of methods.<br>
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}}