在NumPy中将字典转换为数组

5 投票
2 回答
11334 浏览
提问于 2025-04-15 19:02

我想把一个字典里的字典(里面存的是浮点数),用整数作为索引,然后转换成一个可以用在numpy库里的numpy.array。目前我是在手动把这些值转换成两个数组,一个存原来的索引,另一个存值。我看过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

我只想要一个多维的浮点数数组,而不是一个字典数组。

编辑:

抱歉让你们等了。这是我用来创建第一个只包含值的数组对象的代码:

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

我希望有人能告诉我一个简单的方法,把字典里的字典转换成数组。

2 个回答

1

假设你有一个大小为NxM的数组,那么我会这样做:

myarray = numpy.zeros((N, M))
for key1, row in mydict.iteritems():
   for key2, value in row.iteritems():
       myarray[key1, key2] = value 
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 

对于稀疏数组,有多种选择。比如,

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 

撰写回答