给定具有此结构的文件:
例如:
abc
ef 0.85
kl 0.21
xyz 0.923
cldex
plax 0.123
lion -0.831
如何创建稀疏矩阵csr_matrix
?
我试过了:
from collections import defaultdict
x = """abc
ef 0.85
kl 0.21
xyz 0.923
cldex
plax 0.123
lion -0.831""".split('\n')
k1 = ''
arr = defaultdict(dict)
for line in x:
line = line.strip().split('\t')
if len(line) == 1:
k1 = line[0]
else:
k2, v = line
v = float(v)
arr[k1][k2] = v
[出去]
>>> arr
defaultdict(dict,
{'abc': {'ef': 0.85, 'kl': 0.21, 'xyz': 0.923},
'cldex': {'plax': 0.123, 'lion': -0.831}})
嵌套dict结构不像scipy
稀疏矩阵结构那样方便。在
有没有一种方法可以轻松地将上述给定格式的文件读入scipy
稀疏矩阵对象中?
目前,在0.23版本中,pandas已经实现了序列和数据帧的稀疏版本。巧合的是,您的数据可以看作是一个具有多级索引的序列,因此您可以利用这个事实来构建稀疏矩阵。此外,如果格式一致,可以使用几行panda来读取格式,例如:
输出
^{pr2}$to_coo方法不仅返回矩阵,还返回列和行标签,因此还执行逆映射。在上面的示例中,返回以下内容:
其中}对应于列的索引
'ef'
对应于行的索引0
,而{0
。在将@hpaulj的注释转换为answer,可以迭代地添加到行和列索引的列表中。将这些
^{pr2}$
如果需要,可以使用
rinv
和cinv
执行反向映射(将索引转换为字符串)。在既然你有口述
这将有助于您将其带到sparsematrix:
^{pr2}$它利用scipy的example进行增量矩阵构建。输出如下:
相关问题 更多 >
编程相关推荐