0

I would like to turn a matrix of non-negative integers to a binary matrix. For example, given the following input matrix:

2 3
0 1

It should the following output matrix:

1 1
0 1

I think this is similar to a map operation, so pseudocode-wise this operation is equivalent to mapElements(x -> (x > 0) ? 1 : 0) or simply mapNonZeroes(x -> 1).

A possible approach is to unfurl the non-zero elements of the matrix to triplets with the value set to 0/1 and rebuild the matrix from the triplets. Is there a better way to do this?

Gabor Szarnyas
  • 4,410
  • 3
  • 18
  • 42

1 Answers1

1

For me what worked is to directly access the nz_values storage field, and map the values myself.

public void normalizeMatrix(DMatrixSparseCSC m) {
    for (int i = 0; i < m.nz_length; i++) {
        m.nz_values[i] = Math.min(m.nz_values[i], 1.0);
    }
}