在matlab中对矩阵行进行直方图矢量化

时间:2014-01-07 15:20:10

标签: matlab histogram

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

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,但我无法让它发挥作用。 任何帮助将非常感激。 谢谢你的时间。

2 个答案:

答案 0 :(得分:3)

来自Matlab帮助:

  

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

这样:

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

会做你想做的事

答案 1 :(得分:1)

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) ));