2016-08-23 42 views
1

我有一個非常稀疏陣列看起來像:比較兩個陣列具有非常分散的值

Array A: min = -68093253945.0 max=8.54631971208e+13 
Array B: min=-1e+15 max = 1.87343e+14 

並且還每個陣列將具有以一定的水平濃度例如接近2000年,接近1米,接近0.05等等。

我試圖在濃度方面比較這兩個數組,並且希望以不變的方式對每個數據項進行比較。如果可能的話,我也想要考慮巨大的異常值,並且可能會將bin壓縮到0到1之間或者這種類型。

目的是通過使直方圖:

plt.hist(A,alpha=0.5,label='A') # plt.hist passes it's arguments to np.histogram 
ion() 
plt.hist(B,alpha=0.5,label='B') 
plt.title("Histogram of Values") 
plt.legend(loc='upper right') 
plt.savefig('valuecomp.png') 

我該怎麼辦呢?我已經嘗試:

A = stats.zscore(A) 
B = stats.zscore(B) 

A = preprocessing.scale(A) 
B = preprocessing.scale(B) 

A = preprocessing.scale(A, axis=0, with_mean=True, with_std=True, copy=True) 
B = preprocessing.scale(B, axis=0, with_mean=True, with_std=True, copy=True) 

然後我的直方圖,加入normed=Truerange(0,100)。所有的方法都給我一個直方圖,其中有一個接近0.0的大塊垂直塊,而不是平滑地分配值。 range(0,100)看起來不錯,但它忽略了任何值,例如100以外的1m。

也許我需要先從我的數據中刪除異常值,然後再做直方圖?

+0

這是什麼語言?你是否用SciPy使用python?請修改您的標籤。 – ebyrob

+0

@ebyrob完成。這是在python中,我也使用'matplotlib.pyplot'和'sklearn.preprocessing'。 –

+0

對於某些非常量/動態bin-width直方圖,如[this](http://www.astroml.org/user_guide/density_estimation.html#bayesian-blocks-histograms-the-right-way)(來自astroml,也可以在astropy中使用)? – sascha

回答

0

@使用AstroML的薩沙的建議是好的,但knuthfreedman版本似乎採取天文長(原諒雙關語),以及blocks版本逐漸變薄的塊。

我通過from scipy.special import expit獲取了每個值的S形狀,然後繪製了直方圖。只有這樣我才能得到這個工作。