Thin SVD
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 38/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Stale
- Tech stack
- rust
- Domain
- backend-api-design, performance
Research direction
Start by reading lax/src/svd.rs, especially the SvdWork implementation and the documented LAPACK operation table, then compare the entry point in lax/src/lib.rs with the SVD trait in ndarray-linalg/src/svd.rs. Determine how the gesvdx-based thin or economy SVD should fit the existing API; done means the capability is implemented and its supported operation documentation is updated.
Written by the indexing model from the issue text.
Description
I was studying PICARD (a faster version of ICA than "FastICA") and saw some mention of various types of SVD, which I'm already familiar with. One of the variants was "thin" SVD. I can see that there are other libs that save computation by only computing this "thin" variant and I was wondering if maybe ndarray-linalg could too.
I did a search of the code earlier and saw no mention of it, I'm curious if it'd be worth developing.
My understanding is that there are separate LAPACK functions/instructions you'd use for 'economy'/'thin' SVD, gesvdx being the relevant one
-
Intel docs on
gesvdkxhttps://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2023-0/gesvdx.html- note the x part is what differs from the others already implemented, i.e. what makes it 'thin'
For reference I am interested in its use in whitening in this crate
svdfunction: https://github.com/rust-ndarray/ndarray-linalg/blob/49e964be06c830a04442e48e0f9a89d2000bbbd1/lax/src/lib.rs#L422-L437SvdWorkstruct: https://github.com/rust-ndarray/ndarray-linalg/blob/49e964be06c830a04442e48e0f9a89d2000bbbd1/lax/src/svd.rs#L15SVDtrait: https://github.com/rust-ndarray/ndarray-linalg/blob/49e964be06c830a04442e48e0f9a89d2000bbbd1/ndarray-linalg/src/svd.rs#L8-L19
So two things I see there are that
- there's this line saying it is unimplemented
- there's this comment making v clear which LAPACK instructions are supported
and (from right to left in that table)
I'd be interested in this but for now just pointing out where the relevant parts of code are, have not dug deeper! 👍
- Dominant language
- Rust
- Stars
- 452
- Forks
- 95
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from rust-ndarray/ndarray-linalg
-
Difficulty 5/5 Over a week Newbie friendliness 30/100
rust-ndarray/ndarray-linalg#413 · 1 comment ·
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
rust-ndarray/ndarray-linalg#404 ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
rust-ndarray/ndarray-linalg#402 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
rust-ndarray/ndarray-linalg#401 · 2 reactions ·
-
Add RQ decomposition Open
Difficulty 5/5 Over a week Newbie friendliness 35/100
rust-ndarray/ndarray-linalg#398 ·
All issues in rust-ndarray/ndarray-linalg
Similar issues
-
risk:low runtime status:in-progress type:test
Difficulty 1/5 Under an hour Newbie friendliness 92/100
zeroclaw-labs/zeroclaw#11023 ·
-
good first issue refactor
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
EricSpencer00/Resilient#4835 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
bisq-network/bisq-musig#204 ·
-
agent:ready documentation
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
cesarferreira/stax#890 ·