Julia: Difference between revisions
No edit summary |
No edit summary |
||
(18 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 62: | 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] | ||
Line 81: | Line 32: | ||
julia | julia | ||
using Pkg; | using Pkg; | ||
Pkg.activate( | Pkg.activate(@__DIR__); | ||
Pkg.instantiate(); | Pkg.instantiate(); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== | |||
<syntaxhighlight lang=" | ====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> | </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 105: | 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 154: | 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 162: | 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 211: | 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=== | ===Latexify.jl=== | ||
Line 217: | Line 204: | ||
Prints out a latex string for any Julia expression or value.<br> | Prints out a latex string for any Julia expression or value.<br> | ||
Very useful for printing out matrices to insert into Latex documents. | Very useful for printing out matrices to insert into Latex documents. | ||
==References== | |||
{{Reflist}} |