假设您有一个返回表行的生成器。你可以用这样的东西:
for (labels, value) in rows:
pass
“labels”的长度为n,并且为了简单起见,它是所有字符串。 “价值”是像浮动一样的数字。
是否有快速,最佳或内置的方式来对标签进行散列并最终得到一个n维数组值和n个列表,告诉您如何将标签值映射到索引?我想你可以将它存储在一个重新组合中?我一直这样做,但它总是会丢掉一些代码。我想找到或创造更可重用的东西。
我会很高兴
(('here', 'there', 'nowhere'), 1.234)
被映射到results['here']['there']['nowhere'] = 1.234
或results[12,3,45] = 1.234
(并且在每个维度的轴下都有相应的列表。)
我可能会将生成器转换为稀疏格式并使用scipy,但这似乎是一种相当简单的令人讨厌的方法。
我看到很多类似的问题,但没有一个能够完全回答这个问题。也许我错过了一个搜索短语。
答案 0 :(得分:0)
您可以尝试使用结构化数组:
result = np.fromiter(your_generator, dtype=[('labels', '|S10'), ('value', float)])
您可以将ndarray
个标签检索为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']
...