2016-05-17 47 views
1

我知道这是一个非常经典的问题,但经过很多帖子后,我决定将它带回来,而无法找到一个看似基本的东西的优雅解决方案。 问题:从python计数器字典到nd numpy数组

我有一个大的数据集的计数器字典,有意义的整数键和整数事件:

co = Counter({8046: 1360, 10046: 1248, 11046: 1024}) 

只是想一个基本的整型数组来结束:

a = np.array([[8046,1360],[10046,1248],[11046,1024]]) 

这个问题的特殊性(或缺乏特异性)是我有整数键,我不需要结构化数组。下面

dtype = dict(names = ['id','data'], formats=['i8','i8']) 
array = np.fromiter(iter(co.items()), dtype=dtype) 

不是很令人满意,与

a = [(8046, 1360) (10046, 1248) (11046, 1024)] 

结束了这是否只是一种D型的问题吗?非常感谢!

回答

2

你可以把它变成列表的列表转换为numpy的阵列之前:

>>> np.array(list(co.items())) 
array([[ 8046, 1360], 
     [10046, 1248], 
     [11046, 1024]]) 
+0

是的!我迷失在这些类型和迭代器中,忘记了基本知识。所以np.array(list())组合避免了我们指定dtypes。现在我徘徊为什么'np.fromiter'如此刻薄,但我想我只是错过了一些东西。谢谢@kennytm。 – Etienne

+0

如果我没有错,一个简单的'co.items()'应该足以代替'list(co.items())'。 – JRodDynamite

+1

@JRodDynamite'np.array(co.items())'创建一个对象数组而不是2D数组。 'array(dict_items([(8046,1360),(10046,1248),(11046,1024)]),dtype = object)' – kennytm