How to iterate over a row in a SciPy sparse matrix?

I have a sparse matrix random matrix created as follows:

import numpy as np from scipy.sparse import rand foo = rand(100, 100, density=0.1, format='csr') 

I want to iterate over cells in a specific row and do two calculations:

 row1 = foo.getrow(bar1) row2 = foo.getrow(bar2) """ Like the following: sum1 = 0 sum2 = 0 for each cell x in row1: sum1 += x if the corresponding cell (in the same column) in row2 y is non-zero: sum2 += x*y """ 
+5
source share
1 answer

Here's the approach -

 # Get first row summation by simply using sum method of sparse matrix sum1 = row1.sum() # Get the non-zero indices of first row idx1 = row1.indices data1 = row1.data # Or get sum1 here with : `data1.sum()`. # Get the non-zero indices of second row and corresponding data idx2 = row2.indices data2 = row2.data # Get mask of overlap from row1 nonzeros on row2 nonzeros. # Select those from data2 and sum those up for the second summation o/p. sum2 = data1[np.in1d(idx1,idx2)].dot(data2[np.in1d(idx2,idx1)]) 

Alternatively, as suggested in comments by @user2357112 , we can simply use matrix-multiplication to get the second summation -

 sum2 = sum((row1*row2.T).data) 
+2
source

Source: https://habr.com/ru/post/1263070/


All Articles