Arrays
Arrays sind das Arbeitspferd von Julia: dynamisch, typisiert (Vector{Int64}) und mehrdimensional. Indizes beginnen bei 1, end ist das letzte Element.
v = [5, 3, 9, 1]
println(v, " ", length(v), " ", v[1], " ", v[end], " ", v[2:3], " ", v[[1, 4]])
push!(v, 7); pushfirst!(v, 0)
println(v)
letztes = pop!(v); erstes = popfirst!(v)
println(letztes, " ", erstes, " ", v)
append!(v, [20, 30]); insert!(v, 2, 99); deleteat!(v, 2)
println(v)
println(sort(v), " ", sort(v, rev = true), " ", reverse(v), " ", sortperm(v))
println(sum(v), " ", prod([1, 2, 3, 4]), " ", maximum(v), " ", minimum(v), " ", extrema(v))
println(findall(>(5), v), " ", findfirst(==(9), v), " ", v[v .> 5], " ", count(iseven, v))
println(any(>(25), v), " ", all(>(0), v), " ", 9 in v, " ", unique([1, 2, 2, 3, 1]))
println(zeros(3), " ", ones(Int, 2), " ", fill(7, 3), " ", collect(1:2:9), " ", range(0, 1, length = 5))
println(cumsum(1:5), " ", diff([1, 4, 9]), " ", vcat([1, 2], [3]), " ", [1, 2] == [1, 2])
println(first(v, 2), " ", last(v, 2), " ", length(similar(v)), " ", eltype(v), " ", typeof([1, 2.5, 3]))
println(join(v[1:3], ", "), " ", string.(1:3), " ", isempty([]), " ", Int[])Ausgabe
[5, 3, 9, 1] 4 5 1 [3, 9] [5, 1]
[0, 5, 3, 9, 1, 7]
7 0 [5, 3, 9, 1]
[5, 3, 9, 1, 20, 30]
[1, 3, 5, 9, 20, 30] [30, 20, 9, 5, 3, 1] [30, 20, 1, 9, 3, 5] [4, 2, 1, 3, 5, 6]
68 24 30 1 (1, 30)
[3, 5, 6] 3 [9, 20, 30] 2
true true true [1, 2, 3]
[0.0, 0.0, 0.0] [1, 1] [7, 7, 7] [1, 3, 5, 7, 9] 0.0:0.25:1.0
[1, 3, 6, 10, 15] [3, 5] [1, 2, 3] true
[5, 3] [20, 30] 6 Int64 Vector{Float64}
5, 3, 9 ["1", "2", "3"] true Int64[]Matrizen
A = [1 2 3; 4 5 6] # 2x3-Matrix: Leerzeichen trennen Spalten, ; Zeilen
println(A, " ", size(A), " ", A[2, 3], " ", A[:, 2], " ", A[1, :])
B = A' # transponieren
println(B, " ", size(B))
println(A * B) # Matrixprodukt
println(A .* 2, " ", A .+ [10, 20]) # elementweise, Broadcasting über Spalten
println(sum(A), " ", sum(A, dims = 1), " ", sum(A, dims = 2), " ", maximum(A, dims = 2))
println(reshape(1:6, 2, 3), " ", hcat([1, 2], [3, 4]), " ", vcat(A, [7 8 9]))
println([i * j for i in 1:3, j in 1:3])
using LinearAlgebra
M = [2.0 1.0; 1.0 3.0]
println(det(M), " ", inv(M), " ", M \ [3.0, 5.0], " ", tr(M), " ", eigvals(M) .|> x -> round(x, digits = 4))
println(I(2), " ", diagm([1, 2, 3]), " ", norm([3, 4]), " ", dot([1, 2, 3], [4, 5, 6]), " ", cross([1, 0, 0], [0, 1, 0]))Ausgabe
[1 2 3; 4 5 6] (2, 3) 6 [2, 5] [1, 2, 3] [1 4; 2 5; 3 6] (3, 2) [14 32; 32 77] [2 4 6; 8 10 12] [11 12 13; 24 25 26] 21 [5 7 9] [6; 15;;] [3; 6;;] [1 3 5; 2 4 6] [1 3; 2 4] [1 2 3; 4 5 6; 7 8 9] [1 2 3; 2 4 6; 3 6 9] 5.0 [0.6 -0.2; -0.2 0.4] [0.8, 1.4] 5.0 [1.382, 3.618] Bool[1 0; 0 1] [1 0 0; 0 2 0; 0 0 3] 5.0 32 [0, 0, 1]
Die Matrixoperationen (*, \, inv, det, eigvals) stecken im Paket LinearAlgebra der Standardbibliothek.
Tupel und NamedTuple
Ein Tupel ist unveränderlich und kann Verschiedenes enthalten:
t = (1, "zwei", 3.0)
println(t, " ", t[2], " ", length(t), " ", typeof(t))
a, b, c = t
println(a, " ", b, " ", c)
a, b = b, a # Tauschen
println(a, " ", b)
person = (name = "Mia", alter = 17) # NamedTuple
println(person.name, " ", person[:alter], " ", keys(person), " ", values(person))
println(merge(person, (alter = 18, ort = "Berlin")))
first, rest... = [1, 2, 3, 4]
println(first, " ", rest)Ausgabe
(1, "zwei", 3.0) zwei 3 Tuple{Int64, String, Float64}
1 zwei 3.0
zwei 1
Mia 17 (:name, :alter) ("Mia", 17)
(name = "Mia", alter = 18, ort = "Berlin")
1 [2, 3, 4]Dictionaries und Mengen
alter = Dict("Mia" => 17, "Tom" => 25)
alter["Zoe"] = 31
println(alter["Mia"], " ", get(alter, "Ben", 0), " ", haskey(alter, "Tom"), " ", length(alter))
delete!(alter, "Tom")
for name in sort(collect(keys(alter))) # Reihenfolge sortieren!
println(name, " => ", alter[name])
end
println(sort(collect(values(alter))), " ", sort(collect(pairs(alter))))
println(Dict(:a => 1, :b => 2)[:a], " ", get!(alter, "Neu", 5), " ", sort(collect(keys(alter))))
zaehler = Dict{Char, Int}()
for c in "mississippi"
zaehler[c] = get(zaehler, c, 0) + 1
end
println(sort(collect(zaehler)))
println(maximum(values(zaehler)), " ", sort([k for (k, n) in zaehler if n == 4]))
gruppen = Dict{Int, Vector{String}}()
for w in ["ein", "kleiner", "langer", "Satz", "mit", "drei"]
push!(get!(gruppen, length(w), String[]), w)
end
println(sort(collect(gruppen)))
s = Set([3, 1, 2, 3, 1])
println(length(s), " ", 2 in s, " ", sort(collect(union(s, Set([9])))), " ", sort(collect(intersect(s, Set([1, 9])))), " ", sort(collect(setdiff(s, Set([1])))))
println(issubset(Set([1]), s), " ", sort(collect(symdiff(Set([1, 2]), Set([2, 3])))))Ausgabe
17 0 true 3 Mia => 17 Zoe => 31 [17, 31] ["Mia" => 17, "Zoe" => 31] 1 5 ["Mia", "Neu", "Zoe"] ['i' => 4, 'm' => 1, 'p' => 2, 's' => 4] 4 ['i', 's'] [3 => ["ein", "mit"], 4 => ["Satz", "drei"], 6 => ["langer"], 7 => ["kleiner"]] 3 true [1, 2, 3, 9] [1] [2, 3] true [1, 3]
Merke
Vector/Matrix: Indizes ab 1;push!,pop!,sort,sum,findall, Slicingv[2:3]- Matrizen
[1 2; 3 4],A * B,A',A \ b;LinearAlgebrafürdet,inv,eigvals - Tupel (unveränderlich), NamedTuple
(name = "Mia"), Entpackena, b = t Dict("a" => 1),get,haskey,delete!;Setfür Mengen- Reihenfolge in Dict/Set nicht garantiert
Aufgabe
Berechne für eine 3×3-Matrix die Determinante und löse ein lineares Gleichungssystem mit \.