0

假设您有一个返回表行的生成器。你可以像这样使用的东西:

for (labels, value) in rows:
    pass

“标签”的长度为 n 并为简单起见说它是所有字符串。“值”是像浮点数一样的数字。

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

我会很高兴 (('here', 'there', 'nowhere'), 1.234)被映射到results['here']['there']['nowhere'] = 1.234results[12,3,45] = 1.234(并在每个维度的轴上给出相应的列表。)

我可能会编写生成器转换为稀疏格式并使用 scipy,但这似乎是做一些相对简单的事情的讨厌方法。

我看到很多类似的问题,但没有一个能准确回答这个问题。也许我错过了一个搜索短语。

4

1 回答 1

0

您可以尝试使用结构化数组:

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

您将能够检索 andarray标签result['labels'](当然,值也是result['value'])。

请注意,您可以将多个条目存储在同一个标​​签中(前提是您始终具有相同的编号),例如

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

其中每个单独的记录作为一个元组给出,记录的三个“标签”作为一个元组本身。您还可以使用定制的 dtype 单独命名每个“标签”,例如:

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

这样,您可以访问所有A通过result['label']['A']...

于 2012-10-01T20:51:50.913 回答