Hinzufügen von verschobenen NumPy-Matrizen unterschiedlicher Größe

8

Kurz gesagt: Ich habe zwei Matrizen (oder Arrays):

%Vor%

Ich habe die Verschiebung von block_2 im block_1 Elementkoordinatensystem.

%Vor%

Ich möchte in der Lage sein, sie (schnell) hinzuzufügen, um zu bekommen:

%Vor%

In Kürze: Ich möchte einen schnellen Weg, um zwei verschiedene Formmatrizen zusammenzufügen, wobei eine der Matrizen verschoben werden kann. Die resultierende Matrix muss die Form der ersten Matrix haben, und die überlappenden Elemente zwischen den zwei Matrizen werden summiert. Wenn es keine Überlappung gibt, wird nur die erste Matrix unmutiert zurückgegeben.

Ich habe eine Funktion, die gut funktioniert, aber es ist irgendwie hässlich und elementweise:

%Vor%

Kann das vielleicht Broadcasting oder Slicing machen?

Ich habe das Gefühl, dass ich etwas Offensichtliches vermisse.

    
fraxel 27.03.2012, 09:00
quelle

4 Antworten

3

Sie müssen nur den überlappenden Bereich finden und dann die Arrays mit Slicing hinzufügen.

%Vor%

Sie werden direkt hinzugefügt, aber Sie können auch ein neues Array erstellen. Ich habe vielleicht einige Eckfälle übersehen, aber es scheint gut zu funktionieren.

    
jorgeca 27.03.2012, 10:12
quelle
12

Eine einfache Lösung, die wie eine MATLAB-Lösung aussieht, ist:

%Vor%

So verpacken Sie es als eine wiederverwendbare Funktion:

%Vor%     
EwyynTomato 27.03.2012 09:27
quelle
1

Ich bin mir sicher, dass es einen schnellen NumPy-Weg gibt, um dies zu tun, aber es gibt einen effizienteren Weg, es sogar in normalem Python zu machen:

%Vor%     
agf 27.03.2012 09:26
quelle
1

Das ist großartig, und hier ist, wie man die Hinzufügung zu einer 3D-Matrix erweitert, indem man dem Code von jorgeca ein paar Zeilen hinzufügt:

%Vor%

Dies könnte jemandem helfen, der dasselbe in 3d machen möchte (wie ich).

    
kabammi 02.09.2014 22:46
quelle

Tags und Links