Zoeken…


Begrip van de matrix

Basissyntaxis

Julia's matrixbegrippen gebruiken de volgende syntaxis:

[expression for element = iterable]

Merk op dat net als bij for loops alle = , in en worden geaccepteerd voor het begrip.

Dit komt ongeveer overeen met het creëren van een lege array en het gebruik van een for lus om te push! items erop.

result = []
for element in iterable
    push!(result, expression)
end

het type matrixbegrip is echter zo smal mogelijk, wat beter is voor de prestaties.

Om bijvoorbeeld een reeks van de vierkanten van de gehele getallen van 1 tot 10 , kan de volgende code worden gebruikt.

squares = [x^2 for x=1:10]

Dit is een schone, beknopte vervanging voor de langere versie for -loop.

squares = []
for x in 1:10
    push!(squares, x^2)
end

Voorwaardelijk matrixbegrip

Vóór de Julia 0.5 is er geen manier om voorwaarden te gebruiken in de matrixbegrippen. Maar het is niet langer waar. In Julia 0.5 kunnen we de voorwaarden binnen omstandigheden zoals de volgende gebruiken:

julia> [x^2 for x in 0:9 if x > 5] 
4-element Array{Int64,1}:
 36
 49
 64
 81

Bron van het bovenstaande voorbeeld kan worden gevonden hier .

Als we geneste lijstbegrip willen gebruiken:

julia>[(x,y) for x=1:5 , y=3:6 if y>4 && x>3 ]
4-element Array{Tuple{Int64,Int64},1}:
 (4,5)
 (5,5)
 (4,6)
 (5,6)

Multidimensionale matrixbegrippen

Genest for lussen kunnen worden gebruikt om een aantal unieke iterabelen te herhalen.

result = []
for a = iterable_a
    for b = iterable_b
        push!(result, expression)
    end
end

Evenzo kunnen meerdere iteratiespecificaties worden geleverd aan een matrixbegrip.

[expression for a = iterable_a, b = iterable_b]

Het volgende kan bijvoorbeeld worden gebruikt om het Cartesiaanse product van 1:3 en 1:2 te genereren.

julia> [(x, y) for x = 1:3, y = 1:2]
3×2 Array{Tuple{Int64,Int64},2}:
 (1,1)  (1,2)
 (2,1)  (2,2)
 (3,1)  (3,2)

Afgevlakte multidimensionale matrixbegrippen zijn vergelijkbaar, behalve dat ze de vorm verliezen. Bijvoorbeeld,

julia> [(x, y) for x = 1:3 for y = 1:2]
6-element Array{Tuple{Int64,Int64},1}:
 (1, 1)
 (1, 2)
 (2, 1)
 (2, 2)
 (3, 1)
 (3, 2)

is een afgeplatte variant van het bovenstaande. Het syntactische verschil is dat een extra for wordt gebruikt in plaats van een komma.

Generator begrip

Generator-begrippen volgen een vergelijkbare indeling als matrixbegrippen, maar gebruiken haakjes () plaats van vierkante haken [] .

(expression for element = iterable)

Een dergelijke uitdrukking retourneert een Generator object.

julia> (x^2 for x = 1:5)
Base.Generator{UnitRange{Int64},##1#2}(#1,1:5)

Functieargumenten

Generatorbegrippen kunnen worden verstrekt als het enige argument voor een functie, zonder de noodzaak van een extra set haakjes.

julia> join(x^2 for x = 1:5)
"1491625"

Als er echter meer dan één argument wordt gegeven, vergt het begrip van de generator zijn eigen set haakjes.

julia> join(x^2 for x = 1:5, ", ")
ERROR: syntax: invalid iteration specification

julia> join((x^2 for x = 1:5), ", ")
"1, 4, 9, 16, 25"


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow