从多维数据中减去均值

时间:2016-03-21 07:02:29

标签: matlab multidimensional-array mean pca

我想对大量样本进行主成分分析。我没有问题从音频样本中减去均值,因为音频只有2个维度,我可以轻松地使用for循环。

然而,这是视频的另一种情况,因为每个视频样本都有大约18-20个维度。

一个视频文件的内容示例: whos -file sample_video_001.mat结果:size: 54x96x19. bytes: 98496 . class: uint8. attributes: -

我该如何计算?

1 个答案:

答案 0 :(得分:4)

您可以使用强大的bsxfun来计算每个维度的平均值,并直接从原始数组中减去它。

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

我最初认为这有点复杂,因为你有一个'uint8'类矩阵。您在第三维度上的数据平均值最有可能不是整数,因此会自动设置为类'double',而导致bsxfun失败。如果您先将原始数据转换为'double',然后使用bsxfun,则可以使用。可能您可能需要除以256以获取[0 1]范围内的数据,以允许MATLAB将其识别为可绘图格式(B = double(A)./256;也是如此)。你不能回到'uint8',因为你从数据中减去一个非整数均值,所以结果也不是整数。

虽然有一个名为pca的函数,它可能更适合您需要的函数,因为它是一个内置函数。请确保you know how to use it properly