def normalizeRatings(rating, record): #获取书籍的数量m和用户的数量n m,n = rating.shape #rating_mean-书籍平均分 rating_norm-标准化后的书籍得分 rating_mean = np.zeros((m,1)) rating_norm = np.zeros((m,n)) for i in range(m): idx = record[i,:]!=0 rating_mean[i] = np.mean(rating[i,idx]) rating_norm[i,idx] -= rating_mean[i] return rating_norm, rating_mean
时间: 2024-03-04 22:48:22 浏览: 42
这段代码的作用是标准化评分数据,以便在后续的模型训练过程中使用。
首先,它获取评分矩阵"rating"的大小,其中m表示书籍的数量,n表示用户的数量。
然后,它创建两个大小分别为(m,1)和(m,n)的全零矩阵"rating_mean"和"rating_norm"。其中"rating_mean"用于存储每个书籍的平均评分值,"rating_norm"用于存储标准化后的评分值。
接下来,它使用一个for循环遍历所有书籍,对于每个书籍,它首先使用">0"运算符获取该书籍被评分的用户id,然后使用np.mean()函数计算该书籍的平均评分值,并将其存储在"rating_mean"矩阵中。
最后,它使用"-="运算符将该书籍被评分的用户对应的评分值减去该书籍的平均评分值,得到标准化后的评分值,并将其存储在"rating_norm"矩阵中。
这段代码的结果是,我们得到了两个矩阵"rating_mean"和"rating_norm",它们分别表示每个书籍的平均评分值和标准化后的评分值。这些评分数据可以用于训练推荐模型,以便为用户推荐他们可能感兴趣的书籍。
相关问题
def numCells(): m, n = T.shape return m
这段代码定义了一个名为 `numCells` 的函数,该函数没有输入参数。函数内部首先获取了一个名为 `T` 的矩阵的行数和列数,然后返回矩阵的行数 `m`。
注意:代码中的 `m, n = T.shape` 语句实际上是将矩阵 `T` 的行数和列数分别赋值给变量 `m` 和 `n`。这种写法称为“序列解包”。
def in_stock(self): # 获取物料名称和数量 material_name = self.material_name.get() material_qty = int(self.material_qty.get()) # 在记录表中查找物料名称 for row in self.record_sheet.iter_rows(min_row=2): if row[0].value == material_name: # 如果找到了,将数量加上去 row[1].value += material_qty break else: # 如果没有找到,就在记录表中添加一行 row = (material_name, material_qty) self.record_sheet.append(row) # 在数据表中查找物料名称 for row in self.data_sheet.iter_rows(min_row=2): if row[0].value == material_name: # 如果找到了,将数量加上去 row[1].value += material_qty break else: # 如果没有找到,就在数据表中添加一行 row = (material_name, material_qty) self.data_sheet.append(row) # 保存Excel文件 self.wb.save(r"C:\Users\bing3_chen\Desktop\1.xlsx") # 清空文本框 self.material_name.delete(0, tk.END) self.material_qty.delete(0, tk.END)修改第一個循環,不要查詢直接寫入,要注意不能覆蓋數據
好的,你的问题是修改第一个循环,直接写入而不是查询是否存在后再加上数量,但要注意不能覆盖已有数据。那么可以这样修改代码:
```
def in_stock(self):
# 获取物料名称和数量
material_name = self.material_name.get()
material_qty = int(self.material_qty.get())
# 在记录表中查找物料名称
for row in self.record_sheet.iter_rows(min_row=2):
if row[0].value == material_name:
# 如果找到了,将数量加上去
row[1].value += material_qty
# 注意不能覆盖已有数据,直接退出函数
return
# 如果没有找到,就在记录表中添加一行
row = (material_name, material_qty)
self.record_sheet.append(row)
# 在数据表中查找物料名称
for row in self.data_sheet.iter_rows(min_row=2):
if row[0].value == material_name:
# 如果找到了,将数量加上去
row[1].value += material_qty
break
else:
# 如果没有找到,就在数据表中添加一行
row = (material_name, material_qty)
self.data_sheet.append(row)
# 保存Excel文件
self.wb.save(r"C:\Users\bing3_chen\Desktop\1.xlsx")
# 清空文本框
self.material_name.delete(0, tk.END)
self.material_qty.delete(0, tk.END)
```
这样修改后,如果在记录表中找到了对应的物料名称,就直接将数量加上去,不再进行添加行的操作。但是要注意不能覆盖已有数据,因此需要在找到对应行后直接退出函数。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)