Add support for sum and kronecker product of COO sparse matrices#45
Add support for sum and kronecker product of COO sparse matrices#45albertomercurio wants to merge 3 commits intoJuliaSmoothOptimizers:mainfrom
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #45 +/- ##
==========================================
+ Coverage 85.39% 86.41% +1.02%
==========================================
Files 4 4
Lines 363 405 +42
==========================================
+ Hits 310 350 +40
- Misses 53 55 +2 ☔ View full report in Codecov by Sentry. |
tmigot
left a comment
There was a problem hiding this comment.
Thanks @albertomercurio for the PR! That's a great add.
I made some comments regarding the implementation.
@geoffroyleconte or @dpo would you have some time to check this PR too?
| for j in eachindex(rowval_colvalA) | ||
| if rowval_colvalA[j] == rowval_colval[i] | ||
| nzval[i] += A.vals[j] | ||
| break |
There was a problem hiding this comment.
If I am not wrong you assume here that each matrix has unique pair of (row, col) while I don't think it is necessary true.
There was a problem hiding this comment.
But they should be unique, right? I mean, we should merge them in the moment of creating the sparse matrix, no?
There was a problem hiding this comment.
Really sorry @albertomercurio , I completely lost track of this PR. There is a discussion on this https://github.com/orgs/JuliaSmoothOptimizers/discussions/51 , and the status is that QuadraticModels is not merging them by default.
| rowval_colvalA = collect(zip(A.rows, A.cols)) | ||
| rowval_colvalB = collect(zip(B.rows, B.cols)) | ||
|
|
||
| rowval_colval = union(rowval_colvalA, rowval_colvalB) |
There was a problem hiding this comment.
I think there should be a more efficient to do this. The union will iterate over both vectors, and to compute the sum you do it again. Would it be more efficient to do both at the same time?
There was a problem hiding this comment.
At the moment I don’t have anything in mind. Do you have an idea?
There was a problem hiding this comment.
Okay, let's create an issue on the package after this PR is merge to point out to this as a possible improvement.
| for j in eachindex(rowval_colvalB) | ||
| if rowval_colvalB[j] == rowval_colval[i] | ||
| nzval[i] += B.vals[j] | ||
| break |
| Bnnz = nnz(B) | ||
|
|
||
| if Annz == 0 || Bnnz == 0 | ||
| return SparseMatrixCOO(Int[], Int[], T[], out_shape...) |
There was a problem hiding this comment.
This should be tested in the unit tests too
Co-authored-by: Tangi Migot <tangi.migot@gmail.com>
Co-authored-by: Tangi Migot <tangi.migot@gmail.com>
|
What is missing here? It is a pity to not see this in |
|
Hi @CarloLucibello ! As you can see here there are comments that need to be adressed in this PR. |
Hello,
I added the support of the following operations:
A + Bkron(A, B)where both
AandBareSparseMatrixCOO