首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以ijv/coo/triplet格式加载矩阵的最重要的丙酮方法是什么?

以ijv/coo/triplet格式加载矩阵的最重要的丙酮方法是什么?
EN

Stack Overflow用户
提问于 2015-05-22 14:19:34
回答 3查看 1.2K关注 0票数 1

我的输入文件是ijv/coo/triplet格式,带有字符串列名,例如:

代码语言:javascript
复制
Apple,Google,1
Apple,Banana,5
Microsoft,Orange,2

应该产生这个2x3矩阵:

代码语言:javascript
复制
[[1,5,0], [0,0,2]]

我可以手动读取它,方法是将列名放到字典中,并创建一个can稀疏coo_matrix,并将其映射到ID。我想让它在枕木稀疏或熊猫的数据在最后。

还有更多的琵琶的方法吗?熊猫只能阅读csv,有scipy.io,但它们也没有coo格式。因此,如果没有库,什么是进入scipy.coo_matrixpandas.DataFrame的最重要的仿生方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-24 00:53:37

您需要定义从行/列名到某些索引的明确映射( "Apple“是"0”还是"1“并不重要,只是它是由一个数字表示的,因此这将与您的结果不完全匹配,但这并不重要)。在本例中,'info.txt'包含

代码语言:javascript
复制
Apple,Google,1
Apple,Banana,5
Microsoft,Orange,2

以下是实现坐标矩阵的一种方法:

代码语言:javascript
复制
import numpy as np
from scipy.sparse import coo_matrix

input = np.loadtxt( 'info.txt', delimiter=',' , dtype=str)
rows,cols,data = input.T
map_rows = { val:ind for ind,val in enumerate( np.unique(rows) ) }
map_cols = { val:ind for ind,val in enumerate( np.unique(cols) ) }
result   = coo_matrix( (data.astype(float),( [map_rows[x] for x in rows], [map_cols[x] for x in cols]) ) )    

现在有了映射和结果

代码语言:javascript
复制
print map_rows
#{'Apple': 0, 'Microsoft': 1}
print map_cols
#{'Banana': 0, 'Google': 1, 'Orange': 2}
print result.toarray()
#array([[ 5.,  1.,  0.],
#       [ 0.,  0.,  2.]])
票数 1
EN

Stack Overflow用户

发布于 2015-05-22 14:26:37

您可以为此使用csv:

代码语言:javascript
复制
matrix = []
with open('input_file', 'rb') as csvfile:
     input_reader = csv.reader(csvfile, delimiter=',')
     for row in input_reader:
         matrix.append([row[0], row[1], row[2]])

那么您将在matrix中得到这个

代码语言:javascript
复制
[['Apple', 'Google', '1'], ['Apple', 'Banana', '5'], ['Microsoft', 'Orange', '2']]

如果您想要从中获得一个numpy矩阵,我相信根据文档,这应该是可行的:

代码语言:javascript
复制
nm_matrix = np.matrix(matrix)
票数 0
EN

Stack Overflow用户

发布于 2015-05-22 22:51:20

[line.split(",") for line in open(input_file)]会起作用吗?

该代码将读取文件中的每一行,拆分为逗号分隔的行,并将结果收集到列表中。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30399147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档