2013-07-19 89 views
1

我發現了幾個有關在列表中找到值的頻率的問題。雖然我沒有找到任何有關在列表中找到列表的頻率的信息。 (或ndarray在ndarray)Python中列表的列表頻率

在本質上我想找到在唯一行:

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

你應該看看numpy.histogram2d

+0

結果是美麗的:'D – Ojtwist

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} 
+0

你錯過了,你指望每個系列的頻率部分.. –

+0

已更正。謝謝。 – Himanshu

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)