我目前有稀疏矩阵数据的数据文件,如下所示
i j value
0 0 1
5 1 7
1 101 9
...
能够以下列理解将这些数据作为(i,j,value)元组列表读取。
with open("sparse-data.data", "r") as f :
lines = f.readlines()
sparse_format = [tuple(int(x) for x in line.split(" ")]) for line in lines]
这里的目标是我需要从这个给定的格式重建实际的矩阵。
我尝试了以下
X = [[]]
for data_point in sparse_format :
for i, j, val in data_point :
X[i][j] = val
但没有成功。有小费吗?提前谢谢!
〜马特
答案 0 :(得分:1)
您可以使用能够将数据框(导入的数据文件)输出为pandas
数组的numpy
。
#!/usr/bin/env python3
# coding: utf-8
import pandas as pd
# define sample data for pandas DataFrame
d = {'i': [0, 5, 1], 'j': [0, 1, 101], 'val': [1, 7, 9]}
df = pd.DataFrame(data=d)
# print DataFrame to double check format
print(df)
# df.values gives DataFrame as Numpy array
print(df.values)
输出:
i j val
0 0 0 1
1 5 1 7
2 1 101 9
[[ 0 0 1]
[ 5 1 7]
[ 1 101 9]]
要从文件中导入您的数据,我建议您使用pandas.read_csv()
df = pd.read_csv('sparse-data.data', sep=' ')
,并提供:
from collections import defaultdict
X = defaultdict(int)
for data_point in sparse_format :
for i, j, val in data_point :
X[i,j] = val
答案 1 :(得分:1)
鉴于这是一个稀疏矩阵,您可以考虑使用由元组索引的here:
defaultdict(int)
只有文件中的值实际存储在字典中。使用X
,如果您尝试访问实际上不在字典中的键,则只会得到零。
如果您确实要将所有零存储在一个巨大的列表列表中,可以将X = [[0 for i in xrange(MAX_INDEX)] for j in xrange(MAX_INDEX)]
初始化为:
heroku run python manage.py createsuperuser
答案 2 :(得分:1)
使用地图功能
可以轻松完成def get_matrix(mat):
return map(lambda x:list(x), mat)