Spiegeln Sie Werte ungleich null entlang jeder Zeile eines unteren dreieckigen numpy-Arrays

8

Ich habe ein unteres dreieckiges Array, wie B:

%Vor%

Ich möchte es so aussehen lassen:

%Vor%

Das heißt, ich möchte alle positiven Werte nehmen und innerhalb der positiven Werte umkehren, wobei die abschließenden Nullen an Ort und Stelle bleiben. Das macht fliplr nicht:

%Vor%

Irgendwelche Tipps? Außerdem würde das tatsächliche Array, mit dem ich arbeite, etwas wie B.shape = (200,20,4,4) anstelle von (4,4) sein. Jeder (4,4) Block sieht wie das obige Beispiel aus (mit unterschiedlichen Zahlen über die 200, 20 verschiedenen Einträge).

    
Kevin 13.11.2015, 19:27
quelle

2 Antworten

8

Wie wäre es damit:

%Vor%

Derselbe Ansatz wird auf jedes beliebige N -dimensionale Array verallgemeinert, das aus mehreren unteren dreieckigen Submatrizen besteht:

%Vor%

Für eine obere Dreiecksmatrix können Sie stattdessen einfach r von c subtrahieren, z. B .:

%Vor%     
ali_m 13.11.2015, 19:37
quelle
4

Hier ist ein Ansatz für einen 2D -Array-Fall -

%Vor%

Sie können es auf einen 3D -Array-Fall mit der gleichen 2D -Maske erweitern, indem Sie masking die letzten beiden Achsen damit, so -

%Vor%

.. und ähnlich für einen 4D array case, wie so -

%Vor%

Wie man sieht, halten wir den Maskierungsprozess auf den letzten beiden Achsen von (4,4) und die Lösung bleibt im Grunde gleich.

Beispiellauf -

%Vor%     
Divakar 13.11.2015 19:40
quelle

Tags und Links