Julia: Difference between revisions

No edit summary
No edit summary
 
(20 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]
Line 33: Line 32:
julia
julia
using Pkg;
using Pkg;
Pkg.activate("./");
Pkg.activate(@__DIR__);
Pkg.instantiate();
Pkg.instantiate();
</syntaxhighlight>
</syntaxhighlight>
===String Interpolation===
 
<syntaxhighlight lang="julia">
====Updating an existing project====
"Variable x is $x, y is $y, and x+y is $(x+y)"
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>
</syntaxhighlight>


====Other Pkg Commands====
====Other Pkg Commands====
You can see all the commands by typing <code>?</code> in the package manager.
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>update [packagename]</code> Update a specific package or all packages
* <code>remove [packagename]</code> Remove a package
* <code>remove [packagename]</code> Remove a package
* <code>status</code> Show the current Pkg directory and installed packages
* <code>status</code> Show the current Pkg directory and installed packages


===Arrays===
===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">
"Variable x is $x, y is $y, and x+y is $(x+y)"
</syntaxhighlight>
 
====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 57: 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 106: 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 114: 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 163: 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}}