您好我需要为大矩阵中的每一行计算直方图。 例如,对于第一行,我得到了这个:
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
,但我无法让它发挥作用。
任何帮助将非常感激。
谢谢你的时间。
答案 0 :(得分:3)
来自Matlab帮助:
N = hist(Y)将Y的元素分成10个等距容器 并返回每个容器中的元素数。如果Y是 矩阵,hist在列中工作。
这样:
AA = hist(symbolic_data', 1:8);
会做你想做的事
答案 1 :(得分:1)
answer by @Mercury是要走的路。但是如果你想用bsxfun
:
如果您只有整数值,请使用
bin_centers = 1:8;
AA = squeeze(sum(bsxfun(@eq, permute(symbolic_data,[2 3 1]), bin_centers(:).')));
如果值不一定是整数:
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) ));