matlab® 早期版本使用hist
和histc
函式作為建立直方圖和計算 bin 計數的主要方法。這些函式適用於某些常規用途,但總體能力有限。基於這些原因(及其他原因),不建議在新**中使用hist
和histc
:
histogram
、histcounts
和discretize
函式顯著提高了 matlab 中建立和計算直方圖的能力,同時提公升了一致性和易用性。要為新**建立和計算直方圖,推薦使用histogram
、histcounts
和discretize
函式。
請特別注意以下更改,它們體現了相對於hist
和histc
的改進:
hist
的**更新差異
使用hist
時的舊行為
使用histogram
時的新行為
輸入矩陣
hist
為輸入矩陣的每一列建立直方圖並在同一圖窗中併排繪製直方圖。
a = randn(100,2);hist(a)
histogram
將整個輸入矩陣視為乙個高向量並建立乙個直方圖。要繪製多個直方圖,請為每列資料建立乙個不同的直方圖物件。使用hold on
命令在同一圖窗中繪製直方圖。
a = randn(100,2);以上**示例對每個直方圖使用相同的 bin 邊界,但在某些情況下,最好將每個直方圖的h1 = histogram(a(:,1),10)
edges = h1.binedges;
hold on
h2 = histogram(a(:,2),edges)
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);要計算 bin 計數(而不繪製直方圖),請將h = histogram(a);
n = h.values
edges = h.binedges
[n, centers] = hist(a)
替換為[n,edges] = histcounts(a,nbins)
。
預設 bin 數量
預設情況下,hist
使用 10 個 bin。
預設情況下,histogram
和histcounts
都使用自動 bin 劃分演算法。bin 數量由輸入資料的數量和範圍程度確定。
a = randn(100,1);histogram(a)
histcounts(a)
bin 範圍
hist
使用最小和最大有限資料值來確定繪圖中第乙個和最後乙個條形的左邊緣與右邊緣。-inf
和inf
分別包含在第乙個和最後乙個 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);對每列使用 for 迴圈計算 bin 計數。edges = -4:4;
n = histcounts(a,edges)
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...