matlab中hist和histogram的區別

2021-09-24 15:39:54 字數 4421 閱讀 2987

matlab® 早期版本使用histhistc函式作為建立直方圖和計算 bin 計數的主要方法。這些函式適用於某些常規用途,但總體能力有限。基於這些原因(及其他原因),不建議在新**中使用histhistc

histogramhistcountsdiscretize函式顯著提高了 matlab 中建立和計算直方圖的能力,同時提公升了一致性和易用性。要為新**建立和計算直方圖,推薦使用histogramhistcountsdiscretize函式。

請特別注意以下更改,它們體現了相對於histhistc的改進:

hist的**更新差異

使用hist時的舊行為

使用histogram時的新行為

輸入矩陣

hist為輸入矩陣的每一列建立直方圖並在同一圖窗中併排繪製直方圖。

a = randn(100,2);

hist(a)

histogram將整個輸入矩陣視為乙個高向量並建立乙個直方圖。要繪製多個直方圖,請為每列資料建立乙個不同的直方圖物件。使用hold on命令在同一圖窗中繪製直方圖。

a = randn(100,2);

h1 = histogram(a(:,1),10)

edges = h1.binedges;

hold on

h2 = histogram(a(:,2),edges)

以上**示例對每個直方圖使用相同的 bin 邊界,但在某些情況下,最好將每個直方圖的binwidth設定為相同。此外,出於顯示目的,設定每個直方圖的facealpha屬性可能會有所幫助,因為這會影響重疊條形的透明度。

bin 設定

hist接受 bin 中心作為另乙個輸入項。

histogram接受 bin 邊界作為另乙個輸入項。

要將 bin 中心轉換為 bin 邊界以用於histogram,請參閱將 bin 中心轉換為 bin 邊。

若用於hist的 bin 中心是整數,例如hist(a,-3:3),請使用histogram內建的用於整數的新 bin 劃分法。

histogram(a,'binlimits',[-3,3],'binmethod','integers')

輸出引數

hist返回 bin 計數作為乙個輸出引數,也可以選擇返回 bin 中心作為另乙個輸出引數。

a = randn(100,1);

[n, centers] = hist(a)

histogram返回乙個直方圖物件作為輸出引數。該物件包含許多相關屬性(bin 計數、bin 邊界等)。可通過更改直方圖的屬性值修改它的各個方面。有關詳細資訊,請參閱histogram

a = randn(100,1);

h = histogram(a);

n = h.values

edges = h.binedges

要計算 bin 計數(而不繪製直方圖),請將[n, centers] = hist(a)替換為[n,edges] = histcounts(a,nbins)

預設 bin 數量

預設情況下,hist使用 10 個 bin。

預設情況下,histogramhistcounts都使用自動 bin 劃分演算法。bin 數量由輸入資料的數量和範圍程度確定。

a = randn(100,1);

histogram(a)

histcounts(a)

bin 範圍

hist使用最小和最大有限資料值來確定繪圖中第乙個和最後乙個條形的左邊緣與右邊緣。-infinf分別包含在第乙個和最後乙個 bin 中。

如果未設定binlimits,則histogram會基於(但不完全等於)最小和最大的有限資料值來確定 bin 的有理數範圍。histogram將會忽略inf值,除非其中乙個 bin 邊界將inf-inf顯式指定為 bin 邊界。

要重新生成hist(a)對有限資料(無inf值)的結果,請使用 10 個 bin 並將binlimits顯式設定為最小和最大資料值。

a = randi(5,100,1);

histogram(a,10,'binlimits',[min(a) max(a)])

histc的**更新差異

使用histc時的舊行為

使用histcounts時的新行為

輸入矩陣

histc為輸入資料的每列計算 bin 計數。對於m×n輸入矩陣,histc返回大小為length(edges)×n的 bin 計數矩陣。

a = randn(100,10);

edges = -4:4;

n = histc(a,edges)

histcounts將整個輸入矩陣視為乙個高向量並計算整個矩陣的 bin 計數。

a = randn(100,10);

edges = -4:4;

n = histcounts(a,edges)

對每列使用 for 迴圈計算 bin 計數。

a = randn(100,10);

nbins = 10;

n = zeros(nbins, size(a,2));

for k = 1:size(a,2)

n(:,k) = histcounts(a(:,k),nbins);

end

如果由於矩陣中的列數很多而造成效能問題,請考慮繼續使用histc計算各列的 bin 計數。

最後乙個 bin 中包含的值

如果a(i) == edges(end)histc會在最後乙個 bin 中包含元素a(i)。輸出n是乙個具有length(edges)個元素的向量,其中包含 bin 計數。落入 bin 範圍外的值不會計算在內。

如果edges(end-1) <= a(i) <= edges(end)histcounts會在最後乙個 bin 中包含元素a(i)。換言之,histcounts將來自histc的最後兩個 bin 合併為最後乙個 bin。輸出n是乙個具有length(edges)-1個元素的向量,其中包含 bin 計數。如果指定了 bin 邊界,則落入 bin 外部的值不會計算在內。否則,histcounts會自動確定要使用的適當 bin 邊界以包含所有資料。

a = 1:4;

edges = [1 2 2.5 3]

n = histcounts(a)

n = histcounts(a,edges)

histc中最後的 bin 主要用於整數計數。要使用histcounts執行這種整數計數,可以使用'integers'bin 方法:

n = histcounts(a,'binmethod','integers');

輸出引數

histc返回 bin 計數作為乙個輸出引數,也可以選擇返回 bin 索引作為另乙個輸出引數。

a = randn(15,1);

edges = -4:4;

[n,bin] = histc(a,edges)

Matlab中實現hist2D功能

最近處理離散資料的時候,遇到這個問題 許多sample點 x,y 的值相同,因此在plot的時候會重合在一起,看不出出現的頻次。因而我想到要實現乙個hist2d.m函式。顧名思義,它就是乙個二維統計,並用colormap的顏色深淺表示出來。我主要參考了stackoverflow上的這個回答。我在這裡...

vue學習筆記 動態路由 hash和history

上一節講了vue router的基本配置和使用,這節來說動態路由 一 什麼是動態路由 動態路由就是url後面的一些值是可以動態變化的 二 這裡來配乙個動態路由 如下 userid可以動態變化 const routes 建立路由元件 使用者 export default 同時我們通過使用計算屬性 你也...

MATLAB中nargin和nargout的妙用

matlab提供了兩個獲取函式引數數目的函式 nargout與nargin。在函式內部使用時,nargin 和 nargout分別表明有輸入和輸出引數數量。若在函式外部使用,nargin 和nargout對給定的函式,表明輸入和輸出引數數量。如果乙個函式有可變數量的引數,引數數量為負值。nargin...