我有一个.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)))
答案 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])