Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your...
Transcript of Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your...
![Page 1: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/1.jpg)
Julia Part IIJulia for Data Science
Prof. Matthew [email protected]
http://www.maths.adelaide.edu.au/matthew.roughan/
UoA
Oct 31, 2017
M.Roughan (UoA) Julia Part II Oct 31, 2017 1 / 41
![Page 2: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/2.jpg)
A basic problem about any body of data is to make it moreeasily and effectively handleable by minds – our minds,her mind, his mind.
John W. Tukey, Exploratory Data Analysis,Addison-Wesley, 1977
M.Roughan (UoA) Julia Part II Oct 31, 2017 2 / 41
![Page 3: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/3.jpg)
Section 1
Get Started
M.Roughan (UoA) Julia Part II Oct 31, 2017 3 / 41
![Page 4: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/4.jpg)
Interface Cuteness
Matlab uses help, Julia switches into help mode by typeing ?I lookfor in Matlab becomes apropos, e.g.,apropos("determinant")
In Julia can access OS commands by typing ;, e.g.,;pwd
Useful things to knowI history with up and down keysI matches partial stringsI auto-complete with TAB
Standard shell-commandsI Ctrl-c interrupt processI Ctrl-a start of the lineI Ctrl-e end of the lineI Ctrl-d exit
Startup file ˜/.juliarc.jl
M.Roughan (UoA) Julia Part II Oct 31, 2017 4 / 41
![Page 5: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/5.jpg)
Other useful bits and piecesComments in shell-style #
Functions that modify their arguments have a name like sort!Useful commands
whos()@which sin(2)versioninfo()
Numerical constantspigoldeneimeulergamma
Long numbers: 1_000_000Others useful constants
JULIA_HOME # path to julia executablenothing # function that returns void
M.Roughan (UoA) Julia Part II Oct 31, 2017 5 / 41
![Page 6: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/6.jpg)
Section 2
Plotting
M.Roughan (UoA) Julia Part II Oct 31, 2017 6 / 41
![Page 7: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/7.jpg)
Plot packages
There are several plotting packagesPyPlot: emulates Matlab, through Python’s matplotlibGadfly: emulates R’s ggplotPlots: aims to become front end for all backendsGR, UnicodePlots, Plotly, PlotlyJS, Vega, Winston, StatsPlots,PlotRecipes, GLVisualize, PGFPlots, Qwt, ...
M.Roughan (UoA) Julia Part II Oct 31, 2017 7 / 41
![Page 8: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/8.jpg)
PyPlothttps://github.com/JuliaPy/PyPlot.jl
You should have it installed (see startup sheet)I it uses PyCall to call PythonI uses Julia’s multimedia backend to display using various Julia
graphical backends (Qt, GTK, ...)I it should be fairly portable
Syntax is intended to be similar to MatlabI as implemented in matplotlibhttp://matplotlib.org/api/pyplot_api.html
using PyPlotx = linspace(0,2*pi,1000);y = sin.(3 * x + 4 * cos.(2 * x));plot(x, y, color="red", linewidth=2.0,
linestyle="--")title("A sinusoidally modulated sinusoid")
M.Roughan (UoA) Julia Part II Oct 31, 2017 8 / 41
![Page 9: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/9.jpg)
Main commandsYou can get a listing of commands by typing PyPlot.TAB TABSome examples
plotgcf()xlimxlabelxkcdsurfbarfigurefillpietextscatter
When running in a script, you need to use show() to get the fig todisplay.
M.Roughan (UoA) Julia Part II Oct 31, 2017 9 / 41
![Page 10: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/10.jpg)
Example 1
using PyPlotx = 0:0.1:2*pi;y = 0:0.1:pi;X = repmat(x, 1, length(y));Y = repmat(y’, length(x), 1);S = [cos(x[i]) + sin(y[j]) for i=1:length(x),
j=1:length(y) ]surf(X, Y , S, cmap=ColorMap("jet"), alpha=0.7)xlabel("x")ylabel("y")
M.Roughan (UoA) Julia Part II Oct 31, 2017 10 / 41
![Page 11: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/11.jpg)
Example 2
using PyPlotxkcd()plot( [0,1], [0,1])title(L"Plot of $\Gamma_3(x)$")savefig("plot.svg")
# or PNG or EPS or PDF
LaTeXString defined by L”....”
M.Roughan (UoA) Julia Part II Oct 31, 2017 11 / 41
![Page 12: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/12.jpg)
More Examples
https://gist.github.com/gizmaa/7214002https://lectures.quantecon.org/jl/julia_plots.html
M.Roughan (UoA) Julia Part II Oct 31, 2017 12 / 41
![Page 13: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/13.jpg)
Section 3
A Stupidly Short Tour of Packages
M.Roughan (UoA) Julia Part II Oct 31, 2017 13 / 41
![Page 14: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/14.jpg)
Installing Packages
Packages are a collection of code encapsulated into a set ofModules, and (usually) put on GitHub in a standard format
Adding a package can be done in a few ways, but the moststandard is
Pkg.add("PyPlot")Pkg.update()
I takes care of dependenciesI installs code
Get status, and see where code is
Pkg.status()Pkg.Dir.path()LOAD_PATH
M.Roughan (UoA) Julia Part II Oct 31, 2017 14 / 41
![Page 15: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/15.jpg)
Using Packages
Packages are a collection of code encapsulated into a set ofModules, and (usually) put on GitHub in a standard format
Commands to use or import
using PyPlotimport PyPlot
I using simple access to all exported functionsI import uses names space of module, e.g., PyPlot.plot
Other ways to import code
include( "Code/my_code.jl" )reload( "PyPlot" )
M.Roughan (UoA) Julia Part II Oct 31, 2017 15 / 41
![Page 16: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/16.jpg)
Lots of Packages
https://pkg.julialang.org/
1518 registered packages!Some trending packageshttps://github.com/trending/julia
I Deep Learning https://github.com/denizyuret/Knet.jlI IJulia is a Jupyter interactive environmenthttps://github.com/JuliaLang/IJulia.jl
I Gadfly is ggplot-like plottinghttps://github.com/GiovineItalia/Gadfly.jl
I PyCall lets you call Pythonhttps://github.com/JuliaPy/PyCall.jl
I Convex programminghttps://github.com/JuliaOpt/Convex.jl
I
I will talk about a couple of direct use in Data Science
M.Roughan (UoA) Julia Part II Oct 31, 2017 16 / 41
![Page 17: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/17.jpg)
DataFrames
Concept comes from R (as fas as I know)Like a 2D array except
I can have missing valuesI multiple data types
F quantitativeF categorical (strings)
I labelled columns
Nice mapping from Frame to CSV (or similar)
https://en.wikibooks.org/wiki/Introducing_Julia/DataFrames
M.Roughan (UoA) Julia Part II Oct 31, 2017 17 / 41
![Page 18: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/18.jpg)
DataFramesDownload the following dataset, and put in a local folder called Datahttps://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/datasets/Titanic.csv
using DataFramesdata = readtable("Data/Titanic.csv",
nastrings=["NA", "na", "n/a", "missing"])head(data)size(data)showcols(data)data[:Name]temp = deepcopy(data)push!( temp, @data([1314, "my bit", "nth", NA, "male", 1, NA]))tail(temp)deleterows!(temp, 3:5)data[ data[:,:Sex] .=="female", : ]data[ :height ] = @data( rand(size(data,1)) )sort!(data, cols = [order(:Sex), order(:Age)])
M.Roughan (UoA) Julia Part II Oct 31, 2017 18 / 41
![Page 19: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/19.jpg)
JSON
JSON = JavaScript Object NotationData exchange format
I increasingly popularI lightweightI portable
Stores name/value pairsI so it maps to a Dictionary wellI but lots of other data can be stored as JSON
http://www.json.org/
M.Roughan (UoA) Julia Part II Oct 31, 2017 19 / 41
![Page 20: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/20.jpg)
JSON
Download the following dataset, and put in a local folder called Datahttps://raw.githubusercontent.com/corysimmons/colors.json/master/colors.json
import JSONc = JSON.parsefile("Data/colors.json")c["purple"]JSON.print(c)
M.Roughan (UoA) Julia Part II Oct 31, 2017 20 / 41
![Page 21: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/21.jpg)
Distributions
Package for probability distributions and associate facilitiesI momentsI pdf, cdf, logpdf, mgfI samplesI Estimation: MLE, MAP
Included here becauseI its usefulI its a nice example of a Julia package
F type hierarchy used to provide structure to RVse.g., Distributions → Univariate → Continuous → Normal
F multiple dispatch used to call correct version of generically namedfunctions
F easy to add a new one
https://juliastats.github.io/Distributions.jl/latest/
M.Roughan (UoA) Julia Part II Oct 31, 2017 21 / 41
![Page 22: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/22.jpg)
Distributions
using Distributionssrand(123)
d = Normal(0.0, 1.0)x = rand(d, 10)quantile.( d, [ 0.5, 0.975] )params(d)minimum(d)location(d)scale(d)
x = rand(d, 100)fit_mle(Normal, x)
M.Roughan (UoA) Julia Part II Oct 31, 2017 22 / 41
![Page 23: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/23.jpg)
Section 4
Parallel Processing
M.Roughan (UoA) Julia Part II Oct 31, 2017 23 / 41
![Page 24: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/24.jpg)
Julia Macros
Macros look a bit like functions, but begin with @, e.g.,
@printf("Hello %s\n", "World!")@printf "Hello %s\n" "World!"
Why?I Macros are parsed at compile time, to construct custom code for
run timeF e.g., for @printf, we want to interpret the format string at compile
time,F In C, the printf function re-parses the format string each time it is
called, which is inefficientF Also means that C compilers need to be very smart to avoid many
hard-to-debug mistakes of the wrong types of arguments beingpassed to printf
M.Roughan (UoA) Julia Part II Oct 31, 2017 24 / 41
![Page 25: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/25.jpg)
Julia Macros
Julia uses quite a few macros, and you can define your own@time [sin(i) for i in 1:100000];@which sin(1)@show 2 + 2macroexpand(quote @time sin(i) end)
Macros can be MUCH faster ways of implementing codehttps://statcompute.wordpress.com/2014/10/10/julia-function-vs-macro/
Macros can be used to automate annoying bits of replicated code,e.g., @timeIt’s part of the meta-programming paradigm of Julia
I ideas from LispI Julia code is represented (internally) as Julia dataI so you can change the “data”
M.Roughan (UoA) Julia Part II Oct 31, 2017 25 / 41
![Page 26: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/26.jpg)
What Julia Does
1 Raw Julia code is parsedI converted into an Abstract Syntax Tree (AST), held in JuliaI syntax errors are found
2 Create a deeper ASTI Macros play here - they can create and modify unevaluated code
3 Parsed code is runI hopefully really fast
M.Roughan (UoA) Julia Part II Oct 31, 2017 26 / 41
![Page 27: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/27.jpg)
So what does that have to do with ParallelProgramming?
Julia has several functions and macros to aid in parallelprocessingI think the coolest is the “Map/Reduce” functionality introduced by@parallel macro
I maybe you can see why it is a macro?
M.Roughan (UoA) Julia Part II Oct 31, 2017 27 / 41
![Page 28: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/28.jpg)
Setting up for Multi-Processor Ops
There are two approaches for a single, multicore machine
> julia -p 4
julia > addprocs(3)julia > procs()julia > nprocs()
I’m not going to get into how to build a cluster
M.Roughan (UoA) Julia Part II Oct 31, 2017 28 / 41
![Page 29: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/29.jpg)
Map Reduce
Many simple processes can be massively parallelised easily bydecomposing them into Map-Reduce operationsMap: apply an (independent) function or mapping to a small pieceof dataReduce: combine the results of all the mappings into a summaryIt’s a particularly good framework for multiple simulations run inparallel
M.Roughan (UoA) Julia Part II Oct 31, 2017 29 / 41
![Page 30: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/30.jpg)
@parallel
First make sure that all processes have the required environment
@everywhere cd("/home/mroughan/Presentation/Julia/Code")@everywhere include("my_code.jl")
Now run parallelised loop, aggregating results with operator +
nheads = @parallel (+) for i = 1:200_000_000Int(rand(Bool))
end
But take care – data is not automatically shared!!!!!!!!
M.Roughan (UoA) Julia Part II Oct 31, 2017 30 / 41
![Page 31: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/31.jpg)
Section 5
Tips and tricks
M.Roughan (UoA) Julia Part II Oct 31, 2017 31 / 41
![Page 32: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/32.jpg)
Type stability
Use @time to compare the speed of these two functions for large n
function t1(n)s = 0for i in 1:n
s += s/iend
end
function t2(n)s = 0.0for i in 1:n
s += s/iend
end
M.Roughan (UoA) Julia Part II Oct 31, 2017 32 / 41
![Page 33: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/33.jpg)
Don’t avoid loops
Use @time to compare the speed of these two functions for large n
function t1(n)x = zeros(n)for i in 1:n
x[i] = iˆ2endreturn x
end
function t2(n)x = collect(1:n).ˆ2
end
M.Roughan (UoA) Julia Part II Oct 31, 2017 33 / 41
![Page 34: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/34.jpg)
Avoid global variables
Apart from the usual argumentsHard for compiler to optimise around, because type may change
I if you need them, and they don’t change, define them as constants
const DEFAULT_VAL = 0
Note variables defined in the REPL are globalExecute code in functions, not global scope
I write functions, not scripts
M.Roughan (UoA) Julia Part II Oct 31, 2017 34 / 41
![Page 35: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/35.jpg)
Pre-allocate outputs
Use @time to compare the speed of these two functions for large n
function t1(n)x = zeros(Int64, n)for i in 1:n
x[i] = iˆ2endreturn x
end
function t2(n)x = [1]for i in 2:n
push!(x, iˆ2)endreturn x
end
M.Roughan (UoA) Julia Part II Oct 31, 2017 35 / 41
![Page 36: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/36.jpg)
Access arrays in memory order, along columns
2D arrays stored in column order (as in Fortran)I C and Python numpy are in row order
Accessing in this order avoids jumping around in memoryI get the best value out of pipeline and cache
M.Roughan (UoA) Julia Part II Oct 31, 2017 36 / 41
![Page 37: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/37.jpg)
Lots more tips
https://docs.julialang.org/en/latest/manual/performance-tips/
https://github.com/Gnimuc/JuliaSO
http://blog.translusion.com/posts/julia-tricks/
https://julialang.org/blog/2017/01/moredots
M.Roughan (UoA) Julia Part II Oct 31, 2017 37 / 41
![Page 38: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/38.jpg)
Standard Tools
Debugging https://github.com/Keno/Gallium.jl
BenchmarkTools packagehttps://github.com/JuliaCI/BenchmarkTools.jl
Profiler https://docs.julialang.org/en/latest/manual/profile/
Lint package https://github.com/tonyhffong/Lint.jl
Unit testing https://docs.julialang.org/en/stable/stdlib/test/
Literate programming (aka Knitr, ...)https://github.com/mpastell/Weave.jl, and iJulia
M.Roughan (UoA) Julia Part II Oct 31, 2017 38 / 41
![Page 39: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/39.jpg)
Standard Tools
There is a lot more to learnI function definitionI creating modulesI typesI interfaces to other languagesI ...
I tried to concentrate on things where I think it is hard to getstarted learning yourself
M.Roughan (UoA) Julia Part II Oct 31, 2017 39 / 41
![Page 40: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/40.jpg)
Final Comment
Julia is v.shiny, but it’s not all rosesCurrent version is 0.6
I each 0.1 increment has introduced “breaking” changesI the core is still evolvingI it’s getting better, but change is painful
Some libraries aren’t all thereI stagnation, ...
PlottingI argggh!
M.Roughan (UoA) Julia Part II Oct 31, 2017 40 / 41
![Page 41: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/41.jpg)
Conclusion
I don’t like endings, so here are some quotes to go on with.
We – or the Black Chamber – have a little agreementwith [Knuth]; he doesn’t publish the real Volume 4 of theArt of Computer Programming, and they don’t render himmetabolically challenged.
Charles Stross, The Atrocity Archive, 2001
M.Roughan (UoA) Julia Part II Oct 31, 2017 41 / 41
![Page 42: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/42.jpg)
Some more useful references
https://github.com/trending/julia
https://docs.julialang.org/en/latest/manual/performance-tips/
M.Roughan (UoA) Julia Part II Oct 31, 2017 42 / 41
![Page 43: Julia Part II - University of Adelaide · Julia uses quite a few macros, and you can define your own @time [sin(i) for i in 1:100000]; @which sin(1) @show 2 + 2 ... Julia Part II](https://reader033.fdocuments.in/reader033/viewer/2022041613/5e3936f4b67c6b6ab1089a98/html5/thumbnails/43.jpg)
Bonus frames
M.Roughan (UoA) Julia Part II Oct 31, 2017 42 / 41