av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁技術文章
文章詳情頁

使用python繪制cdf的多種實現方法

瀏覽:2日期:2022-08-06 13:21:15

首先我們先用隨機函數編造一個包含1000個數值的一維numpy數組,如下:

// An highlighted blockrng = np.random.RandomState(seed=12345)samples = stats.norm.rvs(size=1000, random_state=rng)

接下來我們將使用各種方法畫出以上數據的累積分布圖

1、matplotlib.pyplot.hist()

def hist(self, x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype=’bar’, align=’mid’, orientation=’vertical’, rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, **kwargs):

第一種方法,我們使用matplotlib圖形庫中的hist函數,熟悉該庫的人應該知道這是一個直方圖繪制函數,以上是從API中找到的hist函數的所有參數,我們給出一維數組或者列表x,使用hist畫出該數據的直方圖。

直方圖有兩種形式,分別是概率分布直方圖和累積分布直方圖(可能說的不準確- -!),可以通過參數cucumulative來調節,默認為False,畫出的是PDF,那么True畫出的便是CDF直方圖。

PDF(figure1)可以觀察到整個數據在橫軸范圍內的分布,CDF(figure2)則可以看出不同的數據分布間的差異性,也可以觀察到整個數據的增長趨勢和波動情況。

使用python繪制cdf的多種實現方法

上圖是概率分布直方圖,縱軸代表概率,如果置參數normed=False,縱軸代表頻數

使用python繪制cdf的多種實現方法

如果我們要觀察兩種數據分布的差異,可能使用直方圖就不是很直觀,各種直方柱會相互重疊,我們只需更改直方圖的圖像類型,令histtype=‘step’,就會畫出一條曲線來(Figure3,實際上就是將直方柱并在一起,除邊界外顏色透明),類似于累積分布曲線。這時,我們就能很好地觀察到不同數據分布曲線間的差異。

使用python繪制cdf的多種實現方法

2、numpy.histogram

def histogram(a, bins=10, range=None, normed=False, weights=None, density=None)

第二種方法我們使用numpy中畫直方圖的函數histogram,該函數不是一個直接的繪圖函數(廢話- -!過渡句,哈哈),給定一組數據a,它會返回兩個數組hist和bin_edges,默認情況下hist是數據在各個區間上的頻率,bin_edges是劃分的各個區間的邊界,說到這我們大概可以想到其實該函數算是上一個函數的底層函數,我們可以依據得到的這兩個數組來畫直方圖,我們也可以用頻率數組來直接畫分布曲線(Figure4)

使用python繪制cdf的多種實現方法

這里我只給出了一個最原始的圖像,直接用hist數組畫的,如果想要變成合格的累積分布曲線圖,縱軸為概率(頻率乘區間長度),橫軸為區間(從bin_edges數組中取n-1個)就可以了

3、stats.relfreq

def relfreq(a, numbins=10, defaultreallimits=None, weights=None)Returns-------frequency : ndarray Binned values of relative frequency.lowerlimit : float Lower real limitbinsize : float Width of each bin.extrapoints : int Extra points.

第三種方法我們使用stats中的relfreq函數,該函數和第二種的方法類似,也并非是直接畫圖,而是返回關于直方圖的一些數據,這里的frequency直接是概率而非頻率,可以直接作為CDF圖的縱軸,但是橫軸需要自己計算,計算公式:

res.lowerlimit + np.linspace(0,res.binsize*res.frequency.size, res.frequency.size)

這個公式應該很好理解,我就不多說了,當然這些返回值都要依賴我們所給出的bins的數目。下面我給出一段代碼,便是使用stats.relfreq畫出概率分布直方圖和累積分布曲線圖。

rng = np.random.RandomState(seed=12345)samples = stats.norm.rvs(size=1000, random_state=rng)res = stats.relfreq(samples, numbins=25)x = res.lowerlimit + np.linspace(0, res.binsize*res.frequency.size,res.frequency.size)fig = plt.figure(figsize=(5, 4))ax = fig.add_subplot(1, 1, 1)ax.bar(x, res.frequency, width=res.binsize)ax.set_title(’Relative frequency histogram’)ax.set_xlim([x.min(), x.max()])plt.show()

使用python繪制cdf的多種實現方法

rng = np.random.RandomState(seed=12345)samples = stats.norm.rvs(size=1000, random_state=rng)res = stats.relfreq(samples, numbins=25)x = res.lowerlimit + np.linspace(0, res.binsize*res.frequency.size,res.frequency.size)y=np.cumsum(res.frequency)plt.plot(x,y)plt.title(’Figure6 累積分布直方圖’)plt.show()

使用python繪制cdf的多種實現方法

以上就是本人整理出來的關于畫cdf直方圖和曲線的三種方法,整理這方面東西的初忠是在發現在進行數據分析的時候,概率分布直方圖只能觀察到數據大概的分布情況,而在不同的數據樣本進行比較時卻很難直觀滴反映其差異性,通過看論文發現cdf可以做到這一點。

本人并不是數學專業出身,想要表達其意義,但有些描述和用詞不當,大家借鑒就好。希望大家多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 思思在线视频 | 黄色一级影片 | 九九热视频在线 | 成人爽a毛片一区二区免费 亚洲午夜在线观看 | 一区二区三区在线免费 | 日韩欧美中文字幕在线观看 | 在线视频亚洲 | 久久精品国产一区二区 | 久久免费国产 | 亚洲影院在线 | av福利在线观看 | 黄色一级大片在线免费看国产一 | 久草视频在线播放 | 日韩午夜激情 | 中文字幕麻豆 | 日韩欧美国产精品 | 国产成人精品一区二区三区在线 | 亚洲精品aaa | 亚洲在线一区二区 | 99国产精品99久久久久久粉嫩 | 亚洲精品色 | 在线成人小视频 | 亚洲免费av在线 | 2021国产精品 | 日本人の夫妇交换 | 日本熟妇毛耸耸xxxxxx | 黄网站免费看 | 欧美日韩亚洲一区 | 一区二区三区视频 | 99热播 | 国产一区在线播放 | 一区二区三区国产精品 | 日韩中文字幕在线观看 | 国产一区二区三区 | 国产激情综合 | 国产在线不卡视频 | 国产欧美视频在线观看 | 亚洲欧美日韩一区 | 亚洲精品一区二三区 | 日韩av在线免费 | 国产在线观看一区 |