Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Csr matrix: How to replace missing value with np.nan instead of 0?

It seems that csr_matrix fill missing value with 0 in default. So how to fill the missing value with 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()

Output:

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

Expected:

array([[0, np.nan, 2],
       [np.nan, np.nan, 3],
       [4, 5, 6]])
like image 350
rosefun Avatar asked Sep 07 '25 04:09

rosefun


1 Answers

Here is a workaround:

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
like image 61
Igor Volkov Avatar answered Sep 09 '25 01:09

Igor Volkov