Saugata Paul
Saugata Paul

Reputation: 69

Adding values to non zero elements in a Sparse Matrix

I have a sparse matrix in which I want to increment all the values of non-zero elements by one. However, I cannot figure it out. Is there a way to do it using standard packages in python? Any help will be appreciated.

Upvotes: 2

Views: 7391

Answers (4)

OldWolfs
OldWolfs

Reputation: 626

I cannot comment on it's performance but you can do (Scipy 1.1.0);

>>> from scipy.sparse import csr_matrix
>>> a = csr_matrix([[0, 2, 0], [1, 0, 0]])
>>> print(a)
(0, 1)        2
(1, 0)        1
>>> a[a.nonzero()] = a[a.nonzero()] + 1
>>> print(a)
(0, 1)        3
(1, 0)        2

Upvotes: 4

dnc423
dnc423

Reputation: 9

When you have a scipy sparse matrix (scipy.sparse) is:

import scipy.sparse as sp
my_matrix = [[2,0,0,0,7],[0,0,0,4,0]]
my_matrix = sp.csc_matrix(my_matrix)
my_matrix.data += 1
my_matrix.todense()

Returns:

[[3, 0, 0, 0, 8], [0, 0, 0, 5, 0]]

Upvotes: 0

crow3487
crow3487

Reputation: 133

You can use the package numpy which has efficient functions for dealing with n-dimensional arrays. What you need is:

array[array>0] += 1

where array is the numpy array of your matrix. Example here: `

import numpy as np
my_matrix = [[2,0,0,0,7],[0,0,0,4,0]]
array = np.array(my_matrix);
print("Matrix before incrementing values: \n", array)
array[array>0] += 1
print("Matrix after incrementing values: \n", array)`

Outputs:

Matrix before incrementing values: 
 [[2 0 0 0 7]
 [0 0 0 4 0]]
Matrix after incrementing values: 
 [[3 0 0 0 8]
 [0 0 0 5 0]]

Hope this helps!

Upvotes: 0

Hemerson Tacon
Hemerson Tacon

Reputation: 2522

If your matrix have 2 dimensions, you can do the following:

sparse_matrix = [[element if element==0 else element+1 for element in row ]for row in sparse_matrix]

It will iterate over every element of your matrix and return the element without any change if it is equals to zero, else it add 1 to the element and return it.

More about conditionals in list comprehension in the answer for this question.

Upvotes: 1

Related Questions