Gar*_*iga 7 python arrays numpy
我有一个numpy数组用于电影用户给出的评级.评级介于1和5之间,而0表示用户不对电影评分.我想计算每部电影的平均评分,以及每个用户的平均评分.换句话说,我将计算每列或一行非零元素的平均值.
是否有一个高效的numpy数组函数来处理这种情况?我知道按列或行手动迭代评级可以解决问题.
提前致谢!
由于要丢弃的值为0,您可以通过沿轴进行求和然后除以非零元素的数量(沿同一轴)手动计算平均值:
a = np.array([[8.,9,7,0], [0,0,5,6]])
a.sum(1)/(a != 0).sum(1)
Run Code Online (Sandbox Code Playgroud)
结果是:
array([ 8. , 5.5])
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,零不被视为平均值.
np.nanmean将所有0值转换为后,您可以使用np.nan.请注意,np.nanmean仅适用于numpy 1.8.
import numpy as np
ratings = np.array([[1,4,5,0],
[2,0,3,0],
[4,0,0,0]], dtype=np.float)
def get_means(ratings):
ratings[np.where(ratings == 0)] = np.nan
user_means = np.nanmean(ratings, axis=1)
movie_means = np.nanmean(ratings, axis=0)
return {'user_means' : user_means, 'movie_means' : movie_means}
Run Code Online (Sandbox Code Playgroud)
结果:
>>> get_means(ratings)
{'movie_means': array([ 2.33333333, 4. , 4. , nan]),
'user_means': array([ 3.33333333, 2.5 , 4. ])}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9055 次 |
| 最近记录: |