2012-10-01 27 views
0

假设您有一个返回表的行的生成器。可以这样使用的东西:将稀疏格式转换为数组numpy

for (labels, value) in rows: 
    pass 

“labels”长度为n,并且为简单起见,它们都是字符串。 “价值”就像浮动数字一样。

是否有一种快速,最好或内置的方式来散列标签,并最终得到一个n维值数组和n个列表,告诉您如何将标签值映射到索引?我想你可以将它存储在一个recarray中?我一直这样做,但它总是会被丢掉一些代码。我想找到或创造更多可重用的东西。

我会很高兴与 (('here', 'there', 'nowhere'), 1.234)被映射到results['here']['there']['nowhere'] = 1.234results[12,3,45] = 1.234(并具有相应的列表中给出的标签向下在每一维的轴。)

我大概可以写发生器转换到稀疏格式和使用scipy,但这似乎是一个肮脏的方式来做一些相对简单的事情。

我看到很多类似的冠冕堂皇的问题,但没有一个完全回答这个问题。也许我错过了一个搜索短语。

回答

0

你可以尝试使用结构数组:

result = np.fromiter(your_generator, dtype=[('labels', '|S10'), ('value', float)]) 

您可以检索标签的ndarrayresult['labels'](和值result['value'],当然)。

请注意,您可以存储多个条目中相同的标签(前提是你总是有相同数量的),如

result = np.array([(('a','b','c'), 1.23),(('a','c','d'), 2.34)], 
        dtype=[('label', ("|S10", 3)), ('value', float)]) 

其中每个单独的记录是作为一个元组,和三个“标签”作为一个元组本身的记录。您也可以命名每一个“标签”分别使用定制的D型,例如:

dtype=[('label',[('A','|S10'),('B','|S10'),('C','|S10')]),('value',float)] 

通过这种方式,你可以访问所有的A通过result['label']['A'] ...

+0

这只是回到了我已经有了。 ..我不想散列列,我想散列行。我会更新这个问题。我不认为我很清楚。 – mathtick

相关问题