Python 从dict构建直方图而不必迭代关键点

Python 从dict构建直方图而不必迭代关键点,python,dictionary,histogram,Python,Dictionary,Histogram,我有一个dict,包含长度不同的numpy数组: MyDcit= {0:array([[ 15. , 3.89678216], [ 36. , 9.49245167], [ 53. , 3.82997799], [ 83. , 5.25727272], [ 86.

我有一个dict,包含长度不同的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]])}
我想获得dict中所有值的直方图。我现在的解决方案是迭代dict中的键,并用固定长度的直方图填充numpy数组:

for KeysElements in MyDict.keys():
     hist,bins = numpy.histogram(np.asarray(MyDict[KeysElements])[:,1],50)
     numpy_hist[KeysElements,:] = hist
然后,我将numpy数组第一维上的所有直方图相加,以获得初始dict的所有键的直方图:

Total_hist = numpy.sum(numpy_hist,axis=0)
这个解决方案的问题是,我不知道如何处理每次迭代都会改变的箱子,所以我的问题是:有没有可能在不必在循环中构建直方图的情况下实现这一点

谢谢你的建议或链接


Greg

您似乎没有在np数组的第二个轴中使用MyDict索引值或第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))

您似乎没有在np数组的第二轴中使用MyDict索引值或第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))

是不是
numpy.histogram(np.asarray(MyDict[KeysElements])[:,1],50)
?我想要numpy数组第二列的直方图,因此numpy.histogram(np.asarray(MyDict[KeysElements])[:,1],50)是
numpy.histogram(np.asarray(MyDict[KeysElements])[:,1],50)
?我想要numpy数组第二列的直方图,因此numpy.histogram(np.asarray(MyDict[KeysElements])[:,1],50)Hei,好的,它就这样做了。谢谢。嘿,好的,它成功了。谢谢