numpy scipy python从csv导入稀疏矩阵

时间:2015-10-25 16:26:43

标签: python csv numpy scipy sparse-matrix

我有一个.csv文件格式如下:

id_A,id_B 2135,1 2303,1 6292,1

大约180k的条目,在稀疏矩阵中,矩阵具有1(另一个值为0)的位置。 我想知道是否有办法在python中使用numpy或scipy导入它。

由于

我尝试了类似的东西,似乎正在运作

with open('icm.csv', 'rt') as f:
    reader = csv.reader(f)
    list = list(reader)
row = [] #i[:] the row indices of the matrix entries
coloumn = [] #[:] the column indices of the matrix entries
data=[] #data[:] the entries of the matrix, in any order
for i in range(1,len(list)):
    row.append(int(list[i][0]))
    coloumn.append(int(list[i][1]))
    data.append(1)
matrix = coo_matrix((data, (coloumn, row)))

1 个答案:

答案 0 :(得分:0)

从样本中制作样本'文件':

In [47]: txt=b"""id_A,id_B
 2135,1
 2303,1
 6292,1"""

加载genfromtxt; result是一个带有2个字段('columns')的结构化数组:

In [48]: data=np.genfromtxt(txt.splitlines(),
   names=True, dtype=None, delimiter=',')
In [49]: data
Out[49]: 
array([(2135, 1), (2303, 1), (6292, 1)], 
      dtype=[('id_A', '<i4'), ('id_B', '<i4')])
In [50]: data['id_A']
Out[50]: array([2135, 2303, 6292])

根据该数据创建coo格式矩阵:

In [51]: from scipy import sparse
In [52]: M=sparse.coo_matrix((np.ones_like(data['id_A']),
             (data['id_A'],data['id_B'])))
In [53]: M
Out[53]: 
<6293x2 sparse matrix of type '<class 'numpy.int32'>'
    with 3 stored elements in COOrdinate format>
In [54]: M.row
Out[54]: array([2135, 2303, 6292], dtype=int32)
In [55]: M.col
Out[55]: array([1, 1, 1], dtype=int32)
In [56]: M.data
Out[56]: array([1, 1, 1])