2016-03-21 19 views
0

Ich möchte eine Hauptkomponentenanalyse für eine große Anzahl von Stichproben durchführen. Ich habe kein Problem, den Mittelwert von Audio-Samples zu subtrahieren, da Audio nur 2 Dimensionen hat und ich einfach eine for Schleife verwenden kann.Mittelwert von multidimensionalen Daten subtrahieren

Dies ist jedoch ein anderer Fall für Video, da jedes Videobeispiel ungefähr 18-20 Dimensionen hat.

Beispiel für Inhalt einer Videodatei: whos -file sample_video_001.mat Ergebnis: size: 54x96x19. bytes: 98496 . class: uint8. attributes: -

Wie kann ich das berechnen?

Antwort

4

können Sie die mächtige bsxfun verwenden den Mittelwert pro Dimension zu berechnen und sie direkt aus dem ursprünglichen Array subtrahieren.

A = randi(256,54,96,19,'uint8'); %// Some random data, replace with your own 
B = double(A);      %// Cast data to double 
Bav = bsxfun(@minus,B,mean(B,3)); %// Subtract the mean 

Es stellte sich heraus ein wenig komplizierter zu sein, dass ich dachte zunächst, wie Sie eine 'uint8' Klasse Matrix haben. Der Mittelwert Ihrer Daten entlang der dritten Dimension ist höchstwahrscheinlich keine ganze Zahl und wird daher automatisch auf die Klasse 'double' festgelegt, wobei eine direkte bsxfun nicht möglich ist. Wenn Sie zuerst Ihre ursprünglichen Daten in 'double' konvertieren und dann bsxfun verwenden, wird es funktionieren. Möglicherweise müssen Sie möglicherweise durch 256 teilen, um Daten im Bereich [0 1] zu erhalten, damit MATLAB es als plottbares Format erkennen kann (also B = double(A)./256;). Sie können nicht zu 'uint8' zurückkehren, da Sie einen nicht ganzzahligen Mittelwert von Ihren Daten subtrahieren, so dass das Ergebnis auch keine Ganzzahl ist.

Es gibt auch eine Funktion namens pca, die wahrscheinlich besser zu dem passt, was Sie brauchen, da es eine eingebaute Funktion ist. Stellen Sie sicher, dass you know how to use it properly.

+0

Ich habe versucht, 'bsxfun' verwenden, aber ein Fehler ist aufgetreten:' Mixed Integer-Klasse Eingänge sind nicht supported' – cathy305

+0

@ cathy305 bitte teilen, welche Art von Daten, die Sie haben. Anscheinend sind das nicht alle Doppelgänger. – Adriaan

+0

Wenn ich den Inhalt der ersten Probe überprüfen .. 'whos -file sample_video_001.mat', es heißt' size: 54x96x19. Bytes: 98496. Klasse: uint8. Attribute: -' – cathy305

Verwandte Themen