【问题标题】:vectorizing histogram on matrix rows in matlab在matlab中对矩阵行进行矢量化直方图
【发布时间】:2014-01-07 15:20:10
【问题描述】:

您好,我需要为大矩阵中的每一行计算直方图。 例如,对于第一行,我得到这个:

AA = hist(symbolic_data(1,:), 1:8);

使用symbolic_data(1,:)=[7 6 7 8 7],我得到AA=[0 0 0 0 0 1 3 1]

当然,这很容易使用简单的 for 循环,但我的 symbolic_data 矩阵非常大。 有没有办法对此进行矢量化。 我一直在摆弄bsxfun,但我无法让它工作。 任何帮助将非常感激。 感谢您的宝贵时间。

【问题讨论】:

    标签: matlab histogram


    【解决方案1】:

    来自 Matlab 帮助:

    N = hist(Y) 将 Y 的元素分箱到 10 个等间距的容器中 并返回每个容器中的元素数。如果 Y 是一个 矩阵,hist 在列中起作用。

    所以:

    AA = hist(symbolic_data', 1:8);
    

    会做你想做的事

    【讨论】:

      【解决方案2】:

      answer by @Mercury 是要走的路。但是如果你想用bsxfun来做:

      1. 如果你只有整数值,使用

        bin_centers = 1:8;
        AA = squeeze(sum(bsxfun(@eq, permute(symbolic_data,[2 3 1]), bin_centers(:).')));
        
      2. 如果值不一定是整数:

        bin_centers = 1:8;
        AA = squeeze(sum( bsxfun(@le, permute(symbolic_data,[2 3 1]), bin_centers(:).'+.5) &...
             bsxfun(@gt, permute(symbolic_data,[2 3 1]), bin_centers(:).'-.5) ));
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-05
        相关资源
        最近更新 更多