在用矩阵分解方法做模型时,需要对模型的结果做验证。在验证过程中需要mask训练集、验证集和测试集。这时候就需要原矩阵 S S S中不为0元素和为0元素的索引值,这个方法在matlab中是find方法,在用python实现时就需要np.nonzero()。下面看一段代码:
import numpy as np
a = np.arange(12).reshape(3, 4)
print(a)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print(np.nonzero(a))
(array([0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]), array([1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]))
值得注意的是np.nonzero(a)输出的是两个array第一个array中的值指的是行,第二个指的是列。如0,1表明第0行第一列的值不为0。
参考文献
[1]https://www.runoob.com/numpy/numpy-matrix.html
[2]numpy创建矩阵常用方法
[3]np.nonzero(ndarray) 返回数组中不为0的元素的索引