Error using sparse Index into matrix must be positive.

15 views (last 30 days)
Im converting a code from python to Matlab
% Python Code
% ksq and old_dim are dimensions e.g. 5, or 10
C = np.arange(old_dim)
R = np.random.random_integers(ksq, size=old_dim) - 1
D = np.random.randint(2, size=old_dim) * 2 - 1
S = scipy.sparse.csr_matrix((D, (R, C)), shape=(ksq, old_dim))
The Matlab code i wrote.
C=1:old_dim;
R = randi(ksq,[1,old_dim]) - 1;
D = randi(2, [1,old_dim]) * 2 - 1;
S = sparse(R,C,D,ksq,old_dim);
When i run my matlab code, it tells me
Error using sparse Index into matrix must be positive.
My guess is when i have a zero in one of the variables R C D thats when it throws this error? and what could be a solution to this. thanks
  1 Comment
Adam
Adam on 21 Feb 2020
Matlab indexes from 1 so just add one to any indexing you have in a 0-indexed language.

Sign in to comment.

Answers (1)

Fabio Freschi
Fabio Freschi on 21 Feb 2020
Edited: Fabio Freschi on 21 Feb 2020
Simply remove "-1" from the definition of R. randi returns pseudorandom integers between 1 and the first inupt. The entries of C will never be 0.
C = 1:old_dim;
R = randi(ksq,[1,old_dim]);
D = randi(2, [1,old_dim]) * 2 - 1;
S = sparse(R,C,D,ksq,old_dim);

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!