从dict构建直方图而无需迭代键

时间:2016-04-28 10:25:16

标签: python dictionary histogram

我有一个包含不同长度的numpy数组的dict:

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]])}

我想获得dict中所有值的直方图。我现在的解决方案是迭代dict中的键并用一个固定长度的直方图填充一个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)

这个解决方案的问题在于我不知道如何处理每次迭代都会改变的箱子,所以我的问题是:有没有可能实现这一点而无需在循环中构建直方图?

感谢您提供任何建议或链接。

格雷格

1 个答案:

答案 0 :(得分:0)

您似乎没有使用MyDict索引值或np数组的第2轴中的第0个值。如果是这种情况,那么你可以将所有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))