2016-04-28 12 views
1

我有一個包含不同長度的陣列numpy的一個字典:建築直方圖,而無需遍歷鍵

MyDcit= {0:array([[ 15.  , 3.89678216], 
        [ 36.  , 9.49245167], 
        [ 53.  , 3.82997799], 
        [ 83.  , 5.25727272], 
        [ 86.  , 8.76663208]]), 
     1:array([[ 4.  , 4.1171155 ], 
        [ 16.  , 12.68122196], 
        [ 31.  , 8.64805222], 
        [ 37.  , 6.07202959]]), 
     2:array([]),..., 
     90:array([[ 1.  , 1.  ], 
        [ 24.  , 8.14221573], 
        [ 27.  , 7.36309862]])} 

我想獲得在字典中的所有值的直方圖。將溶液我現在有是遍歷在字典的鍵和填充numpy的陣列具有固定長度的直方圖:

for KeysElements in MyDict.keys(): 
    hist,bins = numpy.histogram(np.asarray(MyDict[KeysElements])[:,1],50) 
    numpy_hist[KeysElements,:] = hist 

我再總結所有的直方圖在numpy的陣列的拳頭尺寸,以獲得初始字典的所有鍵的直方圖:

Total_hist = numpy.sum(numpy_hist,axis=0) 

與此解決方案的問題是,我不knwo如何處理這對於每次迭代改變箱,所以我的問題是:是否有任何可能性實現這一點,而不必在循環中建立直方圖?

感謝您的任何建議或鏈接。

格雷格

+0

是吧'numpy.histogram(np.asarray(MyDict [KeysElements]):,1,50) '? –

+0

好吧,我想直方圖numpy數組的第二列,所以因此numpy.histogram(np.asarray(MyDict [KeysElements])[:,1],50) – gregory

回答

0

你似乎沒有使用MyDict指數值或零值的NP陣列的第2軸。如果是這種情況,那麼你可以添加所有的numpy的陣列一起做直方圖上

import numpy as np 

MyDict = {0:np.array([[ 15.  , 3.89678216], 
        [ 36.  , 9.49245167], 
        [ 53.  , 3.82997799], 
        [ 83.  , 5.25727272], 
        [ 86.  , 8.76663208]]), 
     1:np.array([[ 4.  , 4.1171155 ], 
        [ 16.  , 12.68122196], 
        [ 31.  , 8.64805222], 
        [ 37.  , 6.07202959]]), 
     2:np.array([]), 
     90:np.array([[ 1.  , 1.  ], 
        [ 24.  , 8.14221573], 
        [ 27.  , 7.36309862]])} 
np_array = np.array([]).reshape(0,2) 

for i in MyDict: 
    a = MyDict[i] 
    if len(a.shape) == 2 and a.shape[1] == 2: 
    np_array = np.append(np_array, MyDict[i], axis=0) 
print(np.histogram(np_array, 50)) 
+0

嘿,好吧它做到了。謝謝。 – gregory