-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for sum and kronecker product of COO sparse matrices #45
base: main
Are you sure you want to change the base?
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. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At the moment I don’t have anything in mind. Do you have an idea?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, let's create an issue on the package after this PR is merge to point out to this as a possible improvement.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
How does SparseMatrixCSC do it?
for j in eachindex(rowval_colvalB) | ||
if rowval_colvalB[j] == rowval_colval[i] | ||
nzval[i] += B.vals[j] | ||
break |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
see comment above
Bnnz = nnz(B) | ||
|
||
if Annz == 0 || Bnnz == 0 | ||
return SparseMatrixCOO(Int[], Int[], T[], out_shape...) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be tested in the unit tests too
Co-authored-by: Tangi Migot <[email protected]>
Co-authored-by: Tangi Migot <[email protected]>
Hello,
I added the support of the following operations:
A + B
kron(A, B)
where both
A
andB
areSparseMatrixCOO