在NumPy中将dict转换为数组

时间:2010-02-08 20:26:57

标签: python arrays dictionary numpy

我想要一个包含浮点数的字典的字典,用int编制索引并将其转换为numpy.array以便与numpy库一起使用。目前我手动将值转换为两个数组,一个用于原始索引,另一个用于值。虽然我已经看过numpy.asarray,但我的结论是我必须做错事。任何人都可以展示如何正确转换这样的创作?不必使用numpy.asarray,任何事情都可以。

from collections import defaultdict
foo = defaultdict( lambda: defaultdict(float) )
#Then "foo" is populated by several
#routines reading results from a DB
#
#As an example
foo[ 7104 ][ 3 ] = 4.5
foo[ 203 ][ 1 ] = 3.2
foo[ 2 ][ 1 ] = 2.7

我想拥有一个浮动的多维数组,而不是一系列的dicts。

编辑:

抱歉延误。这是我用来创建第一个只包含值的数组对象的代码:

storedArray = numpy.asarray( reduce( lambda x,y: x + y, (item.values() for item in storedMapping.values() ) ) )

我希望有人知道一个可以将dict dict转换为数组的魔法子弹。

2 个答案:

答案 0 :(得分:4)

您可以像这样计算N和M

N=max(foo)+1
M=max(max(x) for x in foo.values())+1
fooarray = numpy.zeros((N, M))
for key1, row in foo.iteritems():
   for key2, value in row.iteritems():
       fooarray[key1, key2] = value 

稀疏数组有various options。例如,

import scipy.sparse
foosparse = scipy.sparse.lil_matrix((N, M))
for key1, row in foo.iteritems():
   for key2, value in row.iteritems():
       foosparse[(key1, key2)] = value 

答案 1 :(得分:1)

假设您有一个NxM数组,那么我会执行以下操作:

myarray = numpy.zeros((N, M))
for key1, row in mydict.iteritems():
   for key2, value in row.iteritems():
       myarray[key1, key2] = value