2016-08-04 27 views
4

In Julia v0.5, wie machen Sie eine Funktion, die ist wie Umformen, sondern gibt stattdessen eine Ansicht zurück? ArrayViews.jl hat eine reshape_view-Funktion, aber es scheint nicht direkt kompatibel mit der neuen view Funktion. Ich möchte nur reshapeu zu einem Tupel sizeu, wo ich die Abmessungen nicht kennen.Funktion zum Umformen Ansicht?

+0

'Umgestalten' scheint für mich für Ansichten gut zu funktionieren, und gibt eine Ansicht zurück. Was genau funktioniert nicht für dich? –

+0

Ich möchte ein Array umformen und eine Ansicht dieses Arrays erhalten. –

+0

Ah, richtig, du willst also ein * normales * Array passieren und einen Ausblick bekommen? –

Antwort

6

Wenn Sie eine 'Ansicht' umformen, ist die Ausgabe eine neu gestaltete 'Ansicht'.

Wenn Ihre Ausgangsvariable ein normales Array ist, können Sie sie während des Funktionsaufrufs in eine Ansicht "on the fly" konvertieren.

Es gibt keine Neuzuweisungen während dieses Vorgangs, wie Sie später sehen: Sie können dies mit der Funktion pointer bestätigen. Die Objekte sind nicht die gleichen, in dem Sinne, dass sie als Zeiger auf einen anderen "Typ" interpretiert werden, aber die Speicheradresse ist dieselbe.

julia> A = ones(5,5,5); B = view(A, 2:4, 2:4, 2:4); C = reshape(B, 1, 27); 

julia> is(B,C) 
false 

julia> pointer(B) 
Ptr{Float64} @0x00007ff51e8b1ac8 

julia> pointer(C) 
Ptr{Float64} @0x00007ff51e8b1ac8 

julia> C[1:5] = zeros(1,5); 

julia> A[:,:,2] 
5×5 Array{Float64,2}: 
1.0 1.0 1.0 1.0 1.0 
1.0 0.0 0.0 1.0 1.0 
1.0 0.0 0.0 1.0 1.0 
1.0 0.0 1.0 1.0 1.0 
1.0 1.0 1.0 1.0 1.0