计算矩阵稀疏度时numpy数组的.nonzero()[0]代表什么含义?
代码含义解答
你提到的ratings.nonzero()[0]里的[0]作用如下:
- 首先
ratings是pivot_table转换得到的二维NumPy数组,对应你提到的行是用户、列是代码仓库的评分矩阵 - NumPy数组的
nonzero()方法返回值是和数组维度长度相等的元组:
对于二维数组,返回的元组包含2个元素,第一个元素是所有非零元素的「行索引数组」,第二个元素是所有非零元素的「列索引数组」,两个数组的长度完全相等,数值就是整个矩阵的非零元素总个数 - 这里的
[0]是取出元组的第一个元素(行索引数组),再用len()统计长度,就能得到矩阵非零元素的总数量
补充说明:这里把
[0]换成[1]运行结果完全一致,因为行索引数组和列索引数组的长度都是非零元素总数,只是作者的个人写法习惯。
你可以用下面的小例子验证逻辑:
import numpy as np # 模拟2行3列的简化评分矩阵 demo_arr = np.array([[0, 5, 0], [4, 0, 3]]) print(demo_arr.nonzero()) # 输出结果:(array([0, 1, 1]), array([1, 0, 2])) print(len(demo_arr.nonzero()[0])) # 输出3,对应3个非零元素5、4、3 print(len(demo_arr.nonzero()[1])) # 输出同样为3
内容的提问来源于stack exchange,提问作者Elena Herrero
相关产品推荐
相关产品推荐

