Преобразуйте dict для выстраивания в NumPy

Я хотел бы взять словарь словаря, содержащего плавания, индексированные ints и преобразовать его в 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 в массив.

5
задан wheaties 10 February 2010 в 17:03
поделиться

2 ответа

Вы можете вычислить 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 
4
ответ дан 14 December 2019 в 19:12
поделиться

Допустим, у вас есть массив NxM, тогда я бы сделал следующее:

myarray = numpy.zeros((N, M))
for key1, row in mydict.iteritems():
   for key2, value in row.iteritems():
       myarray[key1, key2] = value 
1
ответ дан 14 December 2019 в 19:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: