How to save a sparse matrix in Julia? I want the saved file to be small since my Matrix size is about (2^26,2^26).

Thanks.

I would just save nonzero indexes and values as CSV:

```
using SparseArrays, DataFrames, CSV
M = sprand(10, 10, 0.2)
I, J, V = findnz(M)
df = DataFrame([:I => I, :J => J, :V => V])
CSV.write("/tmp/spmatrix.csv", df)
```

5 Likes

Thank you, the problem is that CSV file is very large, for example in python I use *.npz which is 2-5 MB but here it can go up to 500 MB.

I don’t know this format, but you can also compress the CSV, eg with gzip.

Alternatively, you can save a bit of space by using the CSC representation (ie export directly from the fields), but I don’t think it is worth it.

1 Like

Great answer. Minor remark in passing: with `LinearAlgebra.I`

, `I`

is no longer a great choice in `I, J, V`

. `R, C, V`

or `M, N, V`

are viable alternatives I’ve seen used.

For production code I would wrap it in a function so this should not matter.

1 Like

Very true!

```
using SparseArrays, DataFrames, CSV, LinearAlgebra
function save_sparse_matrix(M)
I, J, V = findnz(M)
println("I = ", I)
df = DataFrame([:I => I, :J => J, :V => V])
CSV.write("M.csv", df)
end
julia> M = sprand(10, 10, 0.2)
julia> save_sparse_matrix(M)
I = [1, 7, 5, 9, 10, 1, 3, 4, 6, 3, 4, 9, 3, 7, 10, 5, 6, 7, 9, 10, 7]
julia> I
UniformScaling{Bool}
true*I
```

Thanks.