2015-12-06 2 views
0

В моем коде я в настоящее время итерации и создании трех списков:Ошибки в построении разреженной матрицы Python scipy.sparse

данные, строки, столбец

построить разреженную матрицу (она представляет собой рейтинговую матрицу с пользователем u с рейтингом i с рейтингом от 1 до 5), я получил странные ошибки в оцененных рейтингах при проверке моей разреженной матрицы впоследствии: некоторые значения больше 5, что невозможно (я проверил файл и нет рейтинга больше чем 5, я также проверил значения в списке данных, и нет значения больше 5, поэтому ошибка, вероятно, возникает при построении матрицы с использованием sparse.coo_matrix(),

Смотрите мой код ниже:

from scipy import sparse 
import numpy as np 

row = [] 
column = [] 
data= [] 

with open(filename, 'r') as f: 
    for line in f: 
     if not line[0].isdigit(): 
      continue 
     line = line.strip() 
     elem = line.split(',') 

     userid = int(elem[0].strip()) 
     businessid = int(elem[1].strip()) 
     rating = float(elem[2].strip()) 

     row.append(userid) 
     column.append(businessid) 
     data.append(rating) 

#data = np.array(data) 

"""checking if any rating in the file is greater than 5, 
and there is not""" 
for rating in data: 
    if rating > 5: 
     print rating 

total = sparse.coo_matrix((data, (row, column)),dtype=float).tocsr() 

""" Here I'm checking to see if 
there is any rating over than 5 in the sparse matrix 
and there is!""" 
row = total.nonzero()[0] 
column = total.nonzero()[1] 

for u in range(len(row)): 
    indr = row[u] 
    indc = column[u] 
    if total[indr, indc] > 5: 
     print '---' 
     print total[indr, indc] 
     print indr 
     print indc 

А вот начало моего файла:

user,item,rating 
480,0,5 
16890,0,2 
5768,0,4 
319,1,1 
4470,1,4 
7555,1,5 
8768,1,5 

У вас есть представление о том, почему я получаю эту ошибку при построении матрицы?

Большое спасибо!

ответ

1

From the docs for to_csr:

Повторяющиеся записи будут просуммированы

(я понятия не имею, почему он это делает.)

+0

разреженных матриц были разработаны для задач линейной алгебры. Эта функция суммирования очень удобна при построении моделей конечных элементов. Матовая матрица MATLAB делает то же самое. – hpaulj

Смежные вопросы