Does anyone know how to fix this error?
using MatrixMarket
c=MatrixMarket.mmread(“c.mtx”)
Vector(c)
gives
ERROR: MethodError: no method matching (Vector{T} where T)(::SparseArrays.SparseMatrixCSC{Float64, Int64})
where
80174116×1 SparseArrays.SparseMatrixCSC{Float64, Int64} with 2 stored entries:…
Do you expect there to be a Vector
constructor from SparseMatrixCSC
? Do you want it to contain the storage column, or each element of the represented matrix?
If it’s the first, I think x.colptr
does the trick.
Btw, of you write a self-contained example it’s much easier to debug. I don’t have access to your file.
Thanks for the hint. I am digging more into the documentation of Sparse Arrays. c.mtx stores a column vector that I generate from another application. After reading, dump(c)
returns
SparseArrays.SparseMatrixCSC{Float64, Int64}
m: Int64 80174116
n: Int64 1
colptr: Array{Int64}((2,)) [1, 3]
rowval: Array{Int64}((2,)) [25575481, 52682266]
nzval: Array{Float64}((2,)) [-1.0, 1.0]
I think Vector(c) should give me the vector object with sparse entry as specified in SparseMatrixCSC. My code works for when c is constructed within Julia (of different type then SparseMatrixCSC i think).
What do you need it for? There is vec(x)
, but that doesn’t create a real vector either (luckily, because that’s a lot of zeros). Most applications should be able to just use the SparseMatrixCSC
directly.
The other way to think of this is, your object represents an n \times 1
matrix, not a vector. Matrix(x)
works. If you want a vector, you should be using SparseVector
, which does have a constructor from SparseMatrixCSC