Programmiersprache Julia - Erstes Kennenlernen
Zracklo Woashdfee N'ga Mysan Tropollos
sieht sich für uns heute
Julia mal kritisch-euphorisch an.
Und danach schau'n mer mal weiter.
Hier sein Ersteindruck
:
Julia hat ein REPL.
In der mir vorliegenden Einführung ist es (oder er oder sie) unter "The REPL" beschrieben. "The REPL" ist superwichtig!
Unter anderem lassen sich im REPL Pakete installieren, die fim gut (oder auch schlecht) gebrauchen kann
:
The REPL
__ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "?help" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.4.5 (2016-03-18 00:58 UTC)
_/ |\__'_|_|_|\__'_| |
|__/ | i686-linux-gnu
julia> ]
ERROR: syntax: unexpected "]"
julia> )
ERROR: syntax: unexpected ")"
julia> varinfo()
ERROR: UndefVarError: varinfo not defined
julia> VERSION
v"0.4.5"
julia> import Pkg
ERROR: ArgumentError: Pkg not found in path
julia> Pkg.add("Plots")
INFO: Initializing package repository /home/zarko/.julia/v0.4
INFO: Cloning METADATA from git://github.com/JuliaLang/METADATA.jl
INFO: Cloning cache of ColorTypes from https://github.com/JuliaGraphics/ColorTypes.jl.git
INFO: Cloning cache of Colors from https://github.com/JuliaGraphics/Colors.jl.git
INFO: Cloning cache of Compat from https://github.com/JuliaLang/Compat.jl.git
INFO: Cloning cache of FixedPointNumbers from https://github.com/JuliaMath/FixedPointNumbers.jl.git
INFO: Cloning cache of FixedSizeArrays from https://github.com/SimonDanisch/FixedSizeArrays.jl.git
INFO: Cloning cache of Iterators from https://github.com/JuliaCollections/Iterators.jl.git
INFO: Cloning cache of JSON from https://github.com/JuliaIO/JSON.jl.git
INFO: Cloning cache of Measures from https://github.com/JuliaGraphics/Measures.jl.git
INFO: Cloning cache of PlotUtils from https://github.com/JuliaPlots/PlotUtils.jl.git
INFO: Cloning cache of Plots from https://github.com/JuliaPlots/Plots.jl.git
INFO: Cloning cache of RecipesBase from https://github.com/JuliaPlots/RecipesBase.jl.git
INFO: Cloning cache of Reexport from https://github.com/simonster/Reexport.jl.git
INFO: Cloning cache of Showoff from https://github.com/JuliaGraphics/Showoff.jl.git
INFO: Installing ColorTypes v0.2.12
INFO: Installing Colors v0.6.9
INFO: Installing Compat v0.26.0
INFO: Installing FixedPointNumbers v0.2.1
INFO: Installing FixedSizeArrays v0.2.5
INFO: Installing Iterators v0.3.1
INFO: Installing JSON v0.8.3
INFO: Installing Measures v0.0.3
INFO: Installing PlotUtils v0.0.4
INFO: Installing Plots v0.8.2
INFO: Installing RecipesBase v0.0.6
INFO: Installing Reexport v0.0.3
INFO: Installing Showoff v0.0.7
INFO: Building Plots
INFO: Cannot find deps/plotly-latest.min.js... downloading latest version.
--2019-08-15 17:07:13-- https://cdn.plot.ly/plotly-latest.min.js
Auflösen des Hostnamen »cdn.plot.ly (cdn.plot.ly)«... 151.101.14.217
Verbindungsaufbau zu cdn.plot.ly (cdn.plot.ly)|151.101.14.217|:443... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 3238120 (3,1M) [application/javascript]
In »»/home/zarko/.julia/v0.4/Plots/deps/plotly-latest.min.js«« speichern.
/home/zarko/.julia/ 100%[===================>] 3,09M 2,57MB/s in 1,2s
2019-08-15 17:07:14 (2,57 MB/s) - »/home/zarko/.julia/v0.4/Plots/deps/plotly-latest.min.js« gespeichert [3238120/3238120]
INFO: Package database updated
julia>
Ob diese Installation geklappt hat, wage ich anhand der Meldungen noch nicht endgültig zu beurteilen. Irgendwas konnte nicht gefunden werden, ansonsten immerhin scheint alles korrekt durchgelaufen zu sein. Aber, wie gesagt, noch ist es kein Wissens-, nur Annahme-Urteil.
Was passiert nun mit dem kleinen Skript, was ich soeben verfasst und bereits teilgetestet habe?
Skript
#!/usr/bin/env julia
# Variablen
a=['e' 'd' 'f' 'f';11 22 33 44;sin cos tan(pi) pi;"3+4" "5+8" "6+7" "9+2"]
b=["Es sollte eigentlich" " " "sein" "." "klar";55 44 22 11 33]
# Programm
## Audruck der Variablen a
println("Das ist a:")
println(a)
## Ausdruck der Variablen b
println("Das ist b:")
println(b)
## Ausdruck eines Zufallsarrays
print(rand(0:10, 6))
println
## Funktion definieren
function areaofcircle()
println("What's the radius?")
c=readline()
r = parse(Float64, c)
print("a circle with radius $r has an area of:")
println(π * r^2)
end
### Funktion aufrufen
println()
areaofcircle()
## Histogramm ausdrucken
using Plots; gr()
println(histogram(randn(10000), nbins=100))
## Ausdruck des letzten Werts
println("Das ist der letzte Wert:")
println(ans)
Output
julia start.jl
Das ist a:
Any['e' 'd' 'f' 'f'
11 22 33 44
sin cos -1.2246063538223773e-16 π = 3.1415926535897...
"3+4" "5+8" "6+7" "9+2"]
Das ist b:
Any["Es sollte eigentlich" " " "sein" "." "klar"
55 44 22 11 33]
[2,7,3,3,2,5]
What's the radius?
11
a circle with radius 11.0 has an area of:380.132711084365
^Czarko@sylvie:~/Dropbox/Julia-Einstieg/Skripte$ julia start.jl
Das ist a:
Any['e' 'd' 'f' 'f'
11 22 33 44
sin cos -1.2246063538223773e-16 π = 3.1415926535897...
"3+4" "5+8" "6+7" "9+2"]
Das ist b:
Any["Es sollte eigentlich" " " "sein" "." "klar"
55 44 22 11 33]
[0,3,9,6,7,9]
What's the radius?
11
a circle with radius 11.0 has an area of:380.132711084365
WARNING: New definition
floattype(Type{#T<:FixedPointNumbers.Fixed}) at /home/zarko/.julia/v0.4/FixedPointNumbers/src/fixed.jl:16
is ambiguous with:
floattype(Type{FixedPointNumbers.FixedPoint{#T<:Union{Int8, UInt16, UInt8, Int16}, #f<:Any}}) at /home/zarko/.julia/v0.4/FixedPointNumbers/src/FixedPointNumbers.jl:89.
To fix, define
floattype(Type{FixedPointNumbers.Fixed{_<:Union{Int8, Int16}, #f<:Any}})
before the new definition.
WARNING: New definition
floattype(Type{#T<:FixedPointNumbers.UFixed}) at /home/zarko/.julia/v0.4/FixedPointNumbers/src/ufixed.jl:14
...
So, hier angekommen, sind wir - würde ich sagen - doch ganz gut reingestolpert in die Welt von Julia.
In dem Skript haben ein paar Sachen gefunzt, das Plotten des Diagramms jedoch nicht. Und, funzt es innerhalb von "the REPL"?
julia> using Plots; gr()
INFO: Precompiling module Plots...
INFO: Recompiling stale cache file /home/zarko/.julia/lib/v0.4/Plots.ji for module Plots.
Plots.GRBackend()
julia> println(histogram(randn(10000), nbins=100))
[Plots.jl] Initializing backend: gr
WARNING: Couldn't initialize gr. (might need to install it?)
ERROR: ArgumentError: GR not found in path
in backend at /home/zarko/.julia/v0.4/Plots/src/backends.jl:148
Obzwar klar nein immerhin besser als im Skript, wage ich zu behaupten. Egal, das Fehlen von "GR" wird angemeckert. Ist das auch ein Package? Nein, ein Backend - steht doch da! Was ist das GRBackend?
Backends - Plots
Julia Package GR — GR Framework 0.41.1 documentation
Demzufolge müsste sich das genauso wie "Plots" installieren lassen:
julia> Pkg.add("GR")
Ah, okay - es dauert etwas, bis es anfängt!
julia> Pkg.add("GR")
INFO: Cloning cache of GR from https://github.com/jheinen/GR.jl.git
INFO: Installing GR v0.19.0
INFO: Building GR
INFO: Downloading pre-compiled GR 0.23.0 Linux binary
--2019-08-15 17:51:07-- http://gr-framework.org/downloads/gr-0.23.0-Linux-i686.tar.gz
Auflösen des Hostnamen »gr-framework.org (gr-framework.org)«... 134.94.167.101
Verbindungsaufbau zu gr-framework.org (gr-framework.org)|134.94.167.101|:80... verbunden.
HTTP-Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 38057777 (36M) [application/octet-stream]
In »»downloads/gr-0.23.0-Linux-i686.tar.gz«« speichern.
downloads/gr-0.23.0 100%[===================>] 36,29M 2,53MB/s in 14s
2019-08-15 17:51:21 (2,66 MB/s) - »downloads/gr-0.23.0-Linux-i686.tar.gz« gespeichert [38057777/38057777]
INFO: Package database updated
Also war es auch ein Package. Und die Package-Installation über "The REPL" kennen wir jetzt. Ist doch easy, oder?
Und was passiert nun mit:
julia> using Plots; gr()
Plots.GRBackend()
julia> println(histogram(randn(10000), nbins=100))
[Plots.jl] Initializing backend: gr
INFO: Precompiling module GR...
Plot{Plots.GRBackend() n=1}
Weiter nix. Aber der Fehler liegt bei mir.
julia> histogram(randn(10000), nbins=100)
GKS: unable to load font ���
Den "println"-Befehl habe ich für das Skript der ursprünglichen Anleitung angedichtet. Was macht das Skript nun, wenn ich auch da den "println" weglasse?
Output
julia start.jl
Das ist a:
Any['e' 'd' 'f' 'f'
11 22 33 44
sin cos -1.2246063538223773e-16 π = 3.1415926535897...
"3+4" "5+8" "6+7" "9+2"]
Das ist b:
Any["Es sollte eigentlich" " " "sein" "." "klar"
55 44 22 11 33]
[9,6,8,10,3,0]
What's the radius?
11
a circle with radius 11.0 has an area of:380.132711084365
[Plots.jl] Initializing backend: gr
Das ist der letzte Wert:
ERROR: LoadError: UndefVarError: ans not defined
while loading /home/zarko/Dropbox/Julia-Einstieg/Skripte/start.jl, in expression starting on line 50
Es erscheint kein Histogramm. Nun, dann lassen wir das zunächst mal. Die Fehlermeldung "ans not defined" ist auch klar, es wurde ja noch kein Wert ermittelt, der als letzter Wert gespeichert sein könnte. Wurde überhaupt schon ein Wert ermittelt? Ja doch, mindestens mal "c", und der Radius für "11". "11" selbst ist ja auch schon ein ermittelter Wert, über die Eingabe - oder täusche ich mich?
Und nun?
Kleine Änderung im Skript
### Funktion aufrufen
println()
d=areaofcircle()
2 +2
Output
julia start.jl
Das ist a:
Any['e' 'd' 'f' 'f'
11 22 33 44
sin cos -1.2246063538223773e-16 π = 3.1415926535897...
"3+4" "5+8" "6+7" "9+2"]
Das ist b:
Any["Es sollte eigentlich" " " "sein" "." "klar"
55 44 22 11 33]
[2,1,2,6,7,9]
What's the radius?
55
a circle with radius 55.0 has an area of:9503.317777109125
[Plots.jl] Initializing backend: gr
Das ist der letzte Wert:
ERROR: LoadError: UndefVarError: ans not defined
while loading /home/zarko/Dropbox/Julia-Einstieg/Skripte/start.jl, in expression starting on line 51
Befragung von "The REPL" zu diesem Problem
julia> 2+2123
julia> ans
23
Warum "ans" und "Plots" nicht so ohne Weiteres im Skript funktioniert, wird sich sicher im Laufe des weiteren Kennenlernens ergeben. Das Einzige, was ich hier in der ersten Kennenlernschau noch sehen möchte, ist das
Ausgeben einzelner Array-Werte bei mehrdimensionalen Arrays
.
Damit kann ich mich nicht nur zufrieden geben, damit kann ich glücklich werden. Für heute (nachmittag) jedenfalls.
Skriptanpassung
### Funktion aufrufen
println()
d=areaofcircle()
println(d)
## Ein Element von Array "a" ausdrucken
println(a[2,3,4])
println
println("Fertisch! Glückwunsch!")
Fehlermeldung
ERROR: LoadError: BoundsError: attempt to access 4x4 Array{Any,2}:
'e' 'd' 'f' 'f'
11 22 33 44
sin cos -1.22461e-16 π = 3.1415926535897...
"3+4" "5+8" "6+7" "9+2"
at index [2,3,4]
in getindex at ./array.jl:283
Eigentlich unmittelbar einleuchtend, oder?
println(a[2,3])
erbringt:
Das ist a:
Any['e' 'd' 'f' 'f'
11 22 33 44
sin cos -1.2246063538223773e-16 π = 3.1415926535897...
"3+4" "5+8" "6+7" "9+2"]
Das ist b:
Any["Es sollte eigentlich" " " "sein" "." "klar"
55 44 22 11 33]
[0,0,7,10,9,5]
What's the radius?
77
a circle with radius 77.0 has an area of:18626.502843133883
nothing
33
Fertisch! Glückwunsch!
Logo, ein dreidimensionales Array haben wir ja noch gar nicht deklariert.
Das lässt sich vielleicht so bewerkstelligen:
x=zeros(2,2,2)
x[:,:,1] = [1 2; 3 4]
x[:,:,2] = [10 20; 30 40]
## Ein Element von Array "x" ausdrucken
println(x[1,1,1])
println(x[1,1,2])
println(x[1,2,2])
println(x[1,2,1])
println(x[2,2,2])
println
println("Fertisch! Glückwunsch!")
Und tatsächlich:
julia start.jl
Das ist a:
Any['e' 'd' 'f' 'f'
11 22 33 44
sin cos -1.2246063538223773e-16 π = 3.1415926535897...
"3+4" "5+8" "6+7" "9+2"]
Das ist b:
Any["Es sollte eigentlich" " " "sein" "." "klar"
55 44 22 11 33]
[8,7,2,3,2,7]
What's the radius?
33
a circle with radius 33.0 has an area of:3421.194399759285
nothing
1.0
10.0
20.0
2.0
40.0
Fertisch! Glückwunsch!
Etwas übersichtlicher zum Nachkontrollieren
:
x=zeros(2,2,2)
x[:,:,1] = [1 2; 3 4]
x[:,:,2] = [10 20; 30 40]
## Ein Element von Array "x" ausdrucken
println(x[1,1,1])
println(x[1,1,2])
println(x[1,2,2])
println(x[1,2,1])
println(x[2,2,2])
1.0
10.0
20.0
2.0
40.0
Bonbon (und zum Abschluß noch ein kleines ...)
julia> [2,4] .* [10, 20]
2-element Array{Int32,1}:
20
80
julia> a=[2,4] .* [10, 20]
2-element Array{Int32,1}:
20
80
julia> a .* [5,8]
2-element Array{Int32,1}:
100
640
:-)))
Und wie immer bei solchen Programmier-View-Posts möchte ich mich für die schlechte HTML-Formatierung ausrichtend billigst entschuldigen.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
julia - Declare and initialise 3-dimensional array - Stack Overflow Introducing Julia/Arrays and tuples - Wikibooks, open books for an open world Julia Package GR — GR Framework 0.41.1 documentation Backends - Plots GitHub - JuliaPlots/PlotsGR.jl: GR backend for Plots.jl Installation - Plots User/Console Input (read, readline, input) - Usage - JuliaLang readline julia stdin - Google-Suche Introducing Julia/The REPL - Wikibooks, open books for an open world Introducing Julia/Getting started - Wikibooks, open books for an open world
Kommentare
Kommentar veröffentlichen