【问题标题】:Subtract mean from multi-dimensional data从多维数据中减去均值
【发布时间】:2016-07-07 14:23:23
【问题描述】:

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

但是,视频的情况有所不同,因为每个视频样本大约有 18-20 个维度。

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

如何计算?

【问题讨论】:

    标签: matlab multidimensional-array mean pca


    【解决方案1】:

    您可以使用强大的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

    【讨论】:

    • 我尝试使用bsxfun,但出现错误:Mixed integer class inputs are not supported
    • @cathy305 请分享您拥有的数据类型。显然他们并不都是双打。
    • 如果我检查第一个样本的内容..whos -file sample_video_001.mat,它会说size: 54x96x19. bytes: 98496 . class: uint8. attributes: -
    • @cathy305 请将其编辑到问题中。我假设第三个维度是时间轴,前两个是图像的 x-y?
    • @cathy305 我对视频处理不是很熟悉。如果您有另一个问题,请提出另一个问题,如果它回答了您的问题,请保持原样。这有助于保持网站井然有序。
    猜你喜欢
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多