2013-09-23 29 views
0

我必須建立一種直方圖,給定的bin(我不知道這是否是最好的名字來稱呼它們)。 爲了舉例說明:考慮給定的時間間隔來尋找一個值的更接近的數字 - Python

箱櫃是:

-0.15 | -0.10 | -0.05 | 0.0 | 0.05 | 0.10 | 0.15

作爲輸入,我有一個矩陣,其它的值​​是-0.16之間,0.16,例如 因此,如果我讀取0.0884,我必須將其計爲0.10。 我知道,要做到這一點,我可以驗證該值適合的範圍,即[0.05,0.10]。我可以計算該值與其上限和下限(每個絕對值)之間的差異。所以,價值會像在倉內計算一樣,並且有最小的差異。 但我發現如此簡單的代碼可以在Python中執行非常複雜的事情,我知道是否有一種簡單的方法可以做到這一點。

謝謝。

+0

從它看起來你有'matplotlib'可用,這意味着你必須有'numpy'以前的問題;你是否必須爲了教學或作業目的而自己寫一個例程,或者你可以簡單地使用'np.histogram'? – DSM

回答

4
def get_bin(n, step=0.05): 
    return step * round(n/step) 

例子:

>>> get_bin(0.0884) 
0.1 
>>> get_bin(-0.027)                         
-0.05 
>>> get_bin(-0.023)                         
-0.0 

以及這裏描述的這種方法:https://stackoverflow.com/a/2272174/505154

+0

是的,這就是我現在正在做的。很高興知道這是一個很好的解決方案。謝謝。 – pceccon

+0

嗨,@ F.J,我不知道你是否可以幫助我,但我注意到這樣做有時我得到了-0.0。你知道爲什麼信號,我怎麼能阻止這個?謝謝。 – pceccon

+1

[這就是爲什麼會發生](http://docs.python.org/2/tutorial/floatingpoint.html),爲了避免這種類型的問題,你可以將所有東西都乘以100(或20),並使用整數或者查看[decimal模塊](http://docs.python.org/2/library/decimal.html)。 –

0

你想要一個柱狀圖,所以我想你想在垃圾箱的有序列表分配點。 所以這裏有雲:

bins = ((-0.15,[]), (-0.10,[]), (-0.05,[]), (0.00,[]), (0.05,[]), (0.10,[]), (0.15,[])) 

def store(point): 
    for bin in bins: 
     if point < bin[0]: 
      bin[1].append(point) 
      return 
    bins[len(bins)-1][1].append(point) 

store(0.0884) 

bins 
相關問題