繁体   English   中英

将稀疏格式转换为数组numpy

[英]convert sparse format to array numpy

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

for (labels, value) in rows:
    pass

“ labels”的长度为n,为了简单起见,它全部都是字符串。 “值”是一些数字,例如浮点数。

是否有一种快速,最佳或内置的方式对标签进行哈希处理并以n维值数组和n个列表结尾,从而告诉您如何将标签值映射到索引? 我认为您可以将其存储在一个rearray中吗? 我一直在这样做,但最终总是会丢掉一些代码。 我想找到或创建更多可重用的东西。

如果将(('here', 'there', 'nowhere'), 1.234)映射到results['here']['there']['nowhere'] = 1.234results[12,3,45] = 1.234 (并且在每个维度的轴上都给相应的列表指定了标签)。

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

我看到很多类似的听起来的问题,但没有一个能完全回答这个问题。 也许我缺少搜索短语。

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

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)]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM