TypeError为' - '

时间:2018-04-30 08:06:08

标签: python

我收到此错误

File "C:\Users\Morakinyo\.vscode\extensions\ms-python.python-2018.3.1\pythonFiles\experimental\ptvsd\ptvsd\pydevd\_pydev_imps\_pydev_execfile.py", line 25, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)

文件" c:\ Users \ Morakinyo \ Documents \ recommended \ Movie-Recommender-master \ movie-reco.py",第26行,in     train_data_matrix [line [0] -1,line [1] -1] = line [2] TypeError:不支持的操作数类型 - :' str'和' int'

执行此代码时:

import numpy as np
import pandas as pd
header = ['user_id', 'item_id', 'rating', 'timestamp']
df = pd.read_csv('/Users/Morakinyo/Documents/recommend/Movie-Recommender-master/u.data', sep='\t', names=header)
n_users = df.user_id.unique().shape[0]
n_items = df.item_id.unique().shape[0]
print ('Number of users = ' + str(n_users) + ' | Number of movies = ' + str(n_items)  )
from sklearn import model_selection as cv
train_data, test_data = cv.train_test_split(df, test_size=0.25)
train_data_matrix = np.zeros((n_users, n_items))
for line in train_data:
train_data_matrix[line[0]-1, line[1]-1] = line[2]
test_data_matrix = np.zeros((n_users, n_items))
for line in test_data:
test_data_matrix[line[0]-1, line[1]-1] = line[2]
from sklearn.metrics.pairwise import pairwise_distances
user_similarity = pairwise_distances(train_data_matrix, metric='cosine')
def predict(ratings, similarity, type='user'):
if type == 'user':
mean_user_rating = ratings.mean(axis=1)
ratings_diff = (ratings - mean_user_rating[:, np.newaxis]) 
pred = mean_user_rating[:, np.newaxis] + similarity.dot(ratings_diff) / np.array([np.abs(similarity).sum(axis=1)]).T   
return pred
user_prediction = predict(train_data_matrix, user_similarity, type='user')
from sklearn.metrics import mean_squared_error
from math import sqrt
def rmse(prediction, ground_truth):
prediction = prediction[ground_truth.nonzero()].flatten() 
ground_truth = ground_truth[ground_truth.nonzero()].flatten()
return sqrt(mean_squared_error(prediction, ground_truth))
print ('User-based CF RMSE: ' + str(rmse(user_prediction, test_data_matrix)))

我无法弄清楚问题所在。

1 个答案:

答案 0 :(得分:1)

您正尝试从字符串中减去一个整数。错误消息应包括发生错误的实际行。 如果字符串确实是一个整数,您可以使用int(“2”)

转换它

始终尝试在问题中包含完整的错误消息。这使得直接指向错误变得容易。

编辑:由于您提供了完整输出,因此这是失败的行:

train_data_matrix[line[0]-1, line[1]-1] = line[2]

如果行实际包含您可以使用的数字:

train_data_matrix[int(line[0])-1, int(line[1])-1] = line[2]

另一种选择是在使用之前转换训练数据中的所有条目。