1

我发现了几个关于在列表中查找值的频率的问题。虽然我还没有找到任何关于在列表中查找列表频率的信息。(或ndarray中的ndarray)

本质上,我想在以下位置找到唯一行:

ndarray:[[ 3.95428571 5.67428571]

 [ 3.795       4.67166667]
 [ 5.05        6.79      ]
 [ 4.54333333  6.16666667]
 [ 4.7175      6.31      ]
 [ 4.81        6.41      ]
 [ 3.82166667  5.34666667]
 [ 4.16        6.315     ]
 [ 3.915       4.855     ]
 [ 4.44        6.57      ]
 [ 5.1         6.78      ]
 [ 4.03        6.655     ]
 [ 3.71        6.22      ]
 [ 4.57142857  5.51      ]
 [ 3.67        5.45      ]
 [ 4.048       5.484     ]
 [ 4.24714286  5.31142857]
 [ 4.125       6.175     ]
 [ 4.72        4.18      ]
 [ 4.02125     5.82625   ]
 [ 3.729       5.688     ]
 [ 4.17666667  5.80666667]
 [ 4.08        6.102     ]
 [ 5.05        7.1       ]
 [ 4.22        4.968     ]
 [ 3.6625      5.9625    ]
 [ 4.444       5.832     ]
 [ 4.395       7.09      ]
 [ 4.39        5.        ]
 [ 4.745       5.995     ]
 [ 4.81        7.25      ]
 [ 3.74285714  6.22571429]
 [ 5.52        4.38      ]
 [ 3.92        4.1       ]
 [ 3.525       5.91833333]
 [ 3.85666667  6.09333333]
 [ 3.42        5.87...

及其对应的频率。(我想绘制一个二维直方图)

任何想法/提示/解决方案?

4

3 回答 3

4

你应该看看numpy.histogram2d

于 2013-07-19T09:34:31.303 回答
3

或者将项目转换为元组并像这样散列它们:-

l = [[ 3.95428571, 5.67428571],
 [ 3.795       ,4.67166667],
 [ 5.05        ,6.79      ],  
 [ 4.54333333  ,6.16666667],  
 [ 5.1         ,6.78      ],  
 [ 4.03        ,6.655     ],  
 [ 3.71        ,6.22      ]]


hashtable = dict()
for i in l:
    hashtable.setdefault(tuple(i), 0)
    hashtable[tuple(i)] = hashtable[tuple(i)]+1

print hashtable

这有效: -

$ python test.py
{(4.44, 6.57): 1, (3.915, 4.855): 1, (4.54333333, 6.16666667): 1, (4.7175, 6.31): 1, (4.03, 6.655): 1, (5.1, 6.78): 1, (3.71, 6.22): 1, (3.82166667, 5.34666667): 1, (4.81, 6.41): 1, (3.795, 4.67166667): 1, (5.05, 6.79): 1, (4.16, 6.315): 1, (3.95428571, 5.67428571): 1}
于 2013-07-19T09:38:50.093 回答
1

通常,只要您的数据是可散列的,您就可以使用它defaultdict来计算每次出现的次数。由于list不可散列,我已将其转换为tuple. 因此,假设您的数据在data变量(列表列表)中,这应该可以工作并打印简单的直方图:

from collections import defaultdict
counts = defaultdict(int)
for x in data:
    counts[tuple(x)] += 1
for val, cnt in sorted(counts.iteritems(), key=lambda x: x[1]):
    print '%3d: %s' % (cnt, val)
于 2013-07-19T09:44:20.483 回答