首页 > 解决方案 > Csr 矩阵:如何用 np.nan 而不是 0 替换缺失值?

问题描述

似乎默认csr_matrix填充缺失值0。那么如何用 填充缺失值np.nan呢?

from scipy.sparse import csr_matrix
row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([0, 2, 3, 4, 5, 6])
csr_matrix((data, (row, col)), shape=(3, 3)).toarray()

输出:

array([[0, 0, 2],
       [0, 0, 3],
       [4, 5, 6]])

预期的:

array([[0, np.nan, 2],
       [np.nan, np.nan, 3],
       [4, 5, 6]])

标签: pythonscipysparse-matrixscipy.stats

解决方案


这是一种解决方法:

from scipy.sparse import csr_matrix
row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([0, 2, 3, 4, 5, 6])

mask = csr_matrix(([1]*len(data), (row, col)), shape=(3, 3)).toarray()
mask[mask==0] = np.nan

csr_matrix((data, (row, col)), shape=(3, 3)).toarray() * mask

推荐阅读