尝试对ndarray中的值取整时发生错误

时间:2018-08-17 22:26:54

标签: python matrix rounding export-to-csv numpy-ndarray

我正在研究基于内存的协作过滤算法。我正在构建一个要写入CSV文件的矩阵,该矩阵包含三列:usersappratings

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

该如何解决?

1 个答案:

答案 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:,可能不是您想要的。