【问题标题】:What does .nonzero()[0] mean when we want to compute the sparsity of a matrix?当我们想要计算矩阵的稀疏度时,.nonzero()[0] 是什么意思?
【发布时间】:2021-12-05 18:12:38
【问题描述】:

我正在尝试通过阅读一篇博客来了解 Python 中的推荐系统,该博客包含在 GitHub 中创建存储库推荐系统的一个很好的示例。

使用 read_csv() 加载数据集后,编写代码的人决定将该数据转换为 pivot_table pandas,以便以更简单的方式可视化数据。在这里,为了简单起见,我给你留下了那部分代码的图像:

enter image description here

在该表中,行是用户,列是存储库。行和列之间的横截面是用户给特定存储库的标点符号。

由于该表的许多元素都是空的(我们可以说我们有一个稀疏矩阵,这在机器学习中非常典型),他决定通过以下方式研究矩阵的稀疏程度这段代码:

ratings = df_matrix.values
sparsity = float(len(ratings.nonzero()[0]))
sparsity /= (ratings.shape[0] * ratings.shape[1])
sparsity *= 100
print('Sparsity: {:4.2f}%'.format(sparsity))

谁能帮我知道第二行代码是什么意思? 我想我理解 ratings.nonzero() 返回一个列表,其中包含所有不同于零的元素的索引,并且由于我对总数而不是索引感兴趣,因此有必要使用 len(ratings.nonzero( )),但我的问题是我不可能知道代码中的 [0] 是什么意思。

非常感谢您,给您带来的不便深表歉意!

【问题讨论】:

    标签: python pandas sparse-matrix


    【解决方案1】:

    默认情况下,nonzero 将返回 (row_idxs, col_idxs) 形式的元组。如果你给它一个一维数组(比如熊猫系列),那么它仍然会返回一个元组,(row_idxs,)。要访问第一个数组,我们仍然必须索引ratings.nonzero()[0] 以获得非零元素的第一维索引。

    更多信息请参见 nonzero here 的 numpy 页面,因为 pandas 和 numpy 使用相同的实现。

    【讨论】:

      猜你喜欢
      • 2015-01-30
      • 1970-01-01
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2014-10-11
      相关资源
      最近更新 更多