【发布时间】:2017-05-30 07:39:27
【问题描述】:
我正在通过从输入文件中提取特征来创建一个稀疏矩阵文件。输入文件的每一行都包含一个电影 ID,然后是一些功能 ID 和该功能得分。
6729792 4:0.15568 8:0.198796 9:0.279261 13:0.17829 24:0.379707
第一个数字是电影的ID,然后冒号左边的值是特征ID,右边的值是该特征的分数。
每行代表一部电影,feature:score 对的数量因电影而异。
这是我构造稀疏矩阵的方法。
import sys
import os
import os.path
import time
import numpy as np
from Film import Film
import scipy
from scipy.sparse import coo_matrix, csr_matrix, rand
def sparseCreate(self, Debug):
a = rand(self.total_rows, self.total_columns, format='csr')
l, m = a.shape[0], a.shape[1]
f = tb.open_file("sparseFile.h5", 'w')
filters = tb.Filters(complevel=5, complib='blosc')
data_matrix = f.create_carray(f.root, 'data', tb.Float32Atom(), shape=(l, m), filters=filters)
index_film = 0
input_data = open('input_file.txt', 'r')
for line in input_data:
my_line = np.array(line.split())
id_film = my_line[0]
my_line = np.core.defchararray.split(my_line[1:], ":")
self.data_matrix_search_normal[str(id_film)] = index_film
self.data_matrix_search_reverse[index_film] = str(id_film)
for element in my_line:
if int(element[0]) in self.selected_features:
column = self.index_selected_feature[str(element[0])]
data_matrix[index_film, column] = float(element[1])
index_film += 1
self.selected_matrix = data_matrix
json.dump(self.data_matrix_search_reverse,
open(os.path.join(self.output_path, "data_matrix_search_reverse.json"), 'wb'),
sort_keys=True, indent=4)
my_films = Film(
self.selected_matrix, self.data_matrix_search_reverse, self.path_doc, self.output_path)
x_matrix_unique = self.selected_matrix[:, :]
r_matrix_unique = np.asarray(x_matrix_unique)
f.close()
return my_films
问题:
感觉这个函数在大数据集上速度太慢,计算时间太长。
如何改进和加速它?也许使用 MapReduce?这个函数有什么问题让它太慢了?
【问题讨论】:
标签: python python-2.7 parallel-processing mapreduce sparse-matrix