Summe über Blöcke in einer 2D-Matrix - MATLAB

8

Ich arbeite an Matlab und habe mich gefragt, wie ich Begriffe in eine große Matrix einfügen kann. Insbesondere habe ich eine 4914x4914 -Matrix und möchte eine 189x189 -Matrix erstellen, wobei jeder Term gleich der Summe der Terme in jeder 26x26 -Untergruppe ist.

Zur Veranschaulichung: Sagen wir, ich hätte die magische 4x4 -Matrix wie folgt:

%Vor%

und ich wollte eine 2x2 -Matrix erzeugen, die der Summe jeder 2x2 -Matrix innerhalb der ursprünglichen magischen 4x4 entspricht, d.h.:

%Vor%

Dankbar für jeden Rat! Vielen Dank jake

    
jake_matlab_novice 09.10.2014, 13:59
quelle

4 Antworten

4

Ein alternativer Weg besteht darin, die gesamte Matrix in eine 4D-Matrix umzuwandeln und die Elemente über die erste und dritte Dimension zu summieren:

%Vor%     
Mohsen Nosratinia 09.10.2014, 19:56
quelle
12

Unter der Annahme, dass A die Eingabe 4914x4914 Matrix ist, könnte dies ein effizienter (in Bezug auf die Laufzeit) Ansatz sein -

%Vor%

Für eine generische Blockgröße haben wir eine Funktion -

%Vor%

Beispiellauf -

%Vor%

Wenn Sie squeeze -

vermeiden möchten %Vor%

Benchmarking

In der Hoffnung, dass Ihnen die Leistung wichtig ist, hier die Benchmark-Ergebnisse für alle hier veröffentlichten Lösungen. Der Benchmark-Code, den ich verwendet habe -

%Vor%

Die Benchmark-Ergebnisse, die ich auf meinem System bekommen habe -

%Vor%     
Divakar 09.10.2014 14:29
quelle
5

Wenn Sie die Toolbox zur Bildbearbeitung nicht haben, können Sie dies mit accumarray :

tun %Vor%

Dies ist wiederverwendbar, sollten Sie sich entscheiden, eine andere Art als eine einfache Summe zu aggregieren, z. ein Median:

%Vor%     
Dan 09.10.2014 14:18
quelle
5

Sie können natürlich Matrixmultiplikation verwenden:

%Vor%     
Mohsen Nosratinia 09.10.2014 14:22
quelle

Tags und Links