Python 将dict转换为NumPy中的数组

Python 将dict转换为NumPy中的数组,python,arrays,dictionary,numpy,Python,Arrays,Dictionary,Numpy,我想获取一个包含浮点的字典,通过int索引,并将其转换为numpy.array,以便与numpy库一起使用。目前,我正在手动将值转换为两个数组,一个用于原始索引,另一个用于值。当我查看numpy.asarray时,我的结论是我一定是做错了什么。有人能举个例子说明如何正确地转换这样一个创造物吗?不必使用numpy.asarray,任何东西都可以 from collections import defaultdict foo = defaultdict( lambda: defaultdict(fl

我想获取一个包含浮点的字典,通过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
我想要一个多维浮点数数组,而不是dict数组

编辑:

抱歉耽搁了。下面是我用来创建第一个仅包含值的数组对象的代码:

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

我希望有人会知道一个神奇的子弹,可以将一个dict或一个dict转换成一个数组。

你可以这样计算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 

假设您有一个NxM阵列,那么我将执行以下操作:

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

我不清楚你到底从什么开始,想以什么结束。很抱歉搞混了。所以你用字典作为稀疏数组,想把它们转换成numpy数组,对吗?是的,没错。无法保证DB span 1中包含的索引始终是非负的?这也可以作为列表理解来编写,尽管其中可能包含太多内容,难以理解。在列表理解的情况下,您首先创建一个大列表。在这种情况下,您可以绕过此选项,从而减少内存使用。取决于你的喜好。我正在看这个,它基本上看起来像是手动将稀疏数组表示展开为带零的完整表示。如果M,N=10^6,这将很快导致问题。我应该放置我当前使用的代码。@oxiabox。谢谢,修好了。