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