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.
Ich habe versucht, 'bsxfun' verwenden, aber ein Fehler ist aufgetreten:' Mixed Integer-Klasse Eingänge sind nicht supported' – cathy305
@ cathy305 bitte teilen, welche Art von Daten, die Sie haben. Anscheinend sind das nicht alle Doppelgänger. – Adriaan
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