2014-01-07 131 views
1

你好,我需要計算大矩陣中每一行的直方圖。 對於第一排比如我得到這個:向量化矩陣行矩陣中的直方圖

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,但我無法讓它工作。 任何幫助將不勝感激。 謝謝你的時間。

回答

3

從MATLAB幫助:

N = HIST(Y)進行裝倉Y的元件爲10個等間隔的容器 並返回在每個容器中的元素數。如果Y是 矩陣,則hist會在列下進行。

這樣:

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

會做你想要

+0

它當然是。我多麼愚蠢。非常感謝。 – oldflatop

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