|
发表于 2014-12-9 20:37:39
|
显示全部楼层
可以利用numpy模块解决这个问题:
def 文件to数组(路径/文件名txt)
这个函数完成文件到数组的导入,3列N行的二维数组
这里要先把空值的Rid填0
return数组变量 Metrix
def 找出空值(Metrx)
取第三列RUI的值转换成序列 List_RID
k=0
row_num = []
for i in List_RID:
if i==0:
row_num.append (k) #这里就找到哪些Rid是0,然后把他们的序号(下标)给了row_num这个序列
#假如第2和第5行的RUI是0,那么这里row_num就会是[2,5]
return row_num
def 计算方案1、2、3需要的和的平均值
首先是方案一的
先计算出每个Uid对应Rid的和平均值,可以针对Uid一列进行sorted整形
将结果导入到新建的字典Row_dict_1{}中,可以使用get方法,形成这样的结果Row_dict_1{Uid:平均值}
然后是方案二的
把方案一的Uid换成Iid那一列就行,得到Row_dict_2{Iid:平均值}
def 方案1(Metrx , low_num,Row_dict_1):
for i in row_num
利用row_num的每个元素在Metrx中找到对应的Uid,再从Row_dict_1中Row_dict_1[Uid]的值就是该平均值
填入该平均值到Metrx中替换0
替换完所有的0后
return Metrx_1
def 方案2(Metrx , low_num,Row_dict_2):
与方案1一样,只是把Uid换成了Iid
return Metrx_2
def 方案3(Metrx , low_num, Row_dict_1,Row_dict_2):
针对每个row_num元素,先在Metrx中找到Uid与Iid,然后通过查找Row_dict_1[Uid]与Row_dict_1[Iid]
相加除以2赋值给New_Rid
将Rid填入该Rid位置替换0
return Metrx_3
-------------------------------------------------------------
当然这些你得熟悉numpy库、数组索引方式与字典操作方式,有兴趣试试看能否写出来吧~
|
|