我正在研究基于内存的协作过滤算法。我正在构建一个要写入CSV文件的矩阵,该矩阵包含三列:users
,app
和ratings
。
fid = fopen('pred_ratings.csv','wt');
for i=1:user_num
for j=1:item_num
if R(j,i) == 1
entry = Y(j,i);
else
entry = round(P(j,i));
end
fprintf(fid,'%d %d %d\n',i,j,entry);
end
end
fclose(fid);
以上代码是将多维矩阵写入具有3列的文件的MATLAB实现。我尝试使用以下方法在python中模仿:
n_users=816
n_items=17
f = open("guru.txt","w+")
for i in range(1,n_users):
for j in range(1,n_items):
if (i,j)==1 in a:
entry = data_matrix(j, i)
else:
entry = round(user_prediction(j, i))
print(f, '%d%d%d\n', i, j, entry)
f.close
但这会导致以下错误:
File "<ipython-input-198-7a444566e1ce>", line 7, in <module>
entry = round(user_prediction(j, i))
TypeError: 'numpy.ndarray' object is not callable
该如何解决?
答案 0 :(得分:0)
numpy
使用方括号进行索引。由于user_predictions
是一个numpy数组,因此应将其索引为
user_predictions[i, j]
data_matrix
也是如此。
您可能应该阅读Numpy for MATLAB users指南。
编辑: 另外,
if (i,j)==1 in a:
线很可疑。 (i, j)
是两个整数的元组,这意味着它永远不会等于1
。因此,该行等效于if False in a:
,可能不是您想要的。