Python:帮助优化列表理解笨拙的格式

时间:2015-06-06 02:56:29

标签: python machine-learning list-comprehension

我目前有稀疏矩阵数据的数据文件,如下所示

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

但没有成功。有小费吗?提前谢谢!

〜马特

3 个答案:

答案 0 :(得分:1)

您可以使用能够将数据框(导入的数据文件)输出为pandas数组的numpy

根据documentation

#!/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)