2016-09-21 10 views
1

Schauen Sie sich folgendes Spielzeug Beispiel:Umgestalten 3D-Array 2D

m = 3; 
n = 3; 
Y = rand(m,n,2); 

zum Beispiel gibt mir

y (:,:, 1) =

0.8314 0.3993 0.6569 
0.8034 0.5269 0.6280 
0.0605 0.4168 0.2920 

y (:,:, 2) =

0.4317 0.1672 0.1981 
0.0155 0.1062 0.4897 
0.9841 0.3724 0.3395 

wenn ich jetzt umformen es

mit
reshape(Y,m*n,2) 

es die Ordnung stört und gibt mir,

0.8314 0.4317 
0.8034 0.0155 
0.0605 0.9841 
0.3993 0.1672 
0.5269 0.1062 
0.4168 0.3724 
0.6569 0.1981 
0.6280 0.4897 
0.2920 0.3395 

weil hier 2. Reihe

sollte
0.3993 0.1672 

dies kann vor der Umformung von

überprüft werden
Y(1,1,:) 
Y(1,2,:) 
etc. 

Die Reihenfolge ändert sich.

PS: Ich habe riesige Daten im neuronalen Netzwerk eingespeist und dies beeinflusst die Art, wie meine Gewichte multipliziert werden.

Antwort

2

in permute dort hinzufügen und dann reshape, wie so -

reshape(permute(y,[2,1,3]),[],size(y,3)) 

Probelauf -

>> y 
y(:,:,1) = 
     0.8314  0.3993  0.6569 
     0.8034  0.5269  0.628 
     0.0605  0.4168  0.292 
y(:,:,2) = 
     0.4317  0.1672  0.1981 
     0.0155  0.1062  0.4897 
     0.9841  0.3724  0.3395 
>> reshape(permute(y,[2,1,3]),[],size(y,3)) 
ans = 
     0.8314  0.4317 
     0.3993  0.1672 
     0.6569  0.1981 
     0.8034  0.0155 
     0.5269  0.1062 
     0.628  0.4897 
     0.0605  0.9841 
     0.4168  0.3724 
     0.292  0.3395 
+0

danken you.It works.But umformen sollte nur den Auftrag erhalten. scheint nicht logisch! Ich werde die Antwort akzeptieren – Hima

+0

@Hima Wenn Sie bedenken, dass MATLAB col-major Indexierung folgt, würde es ein bisschen mehr logisch erscheinen. Also, das zweite Element ist "0.8034" und nicht "0.3993". Wir brauchen "permutieren", damit die ersten zwei Dims ausgetauscht werden. Diese Umgestaltung gibt uns endlich eine 2D-Version. – Divakar

+0

Okay, dann sollte y (1,2,1) auch dasselbe geben, aber das tut es nicht. – Hima