Andrew Radcliffe
184f38b227
Replace known-problematic variance algorithm (for `column_variance`)
...
The existing algorithm for `column_variance` uses the textbook
formula (`E[X^2]` - E[X]^2), which is well-established to have
numerical issues. While the intention (traversal
of the elements in column-major order) of the extant algorithm
is apparent, we should not sacrifice precision when we do not need to
-- the two-pass algorithm for variance (N.B. the existing algorithm is
already a two-pass algorithm, anyway) using the formula `E[(x -
E[x])(x - E[x]])` can be substituted without issue.
Notably, the other variance implementations in the `statistics`
module use `E[(x -E[x])(x - E[x]])`. Loss of precision aside,
keeping the existing implementation of `column_variance`
causes the obvious absurdity:
```rust
use nalgebra::Matrix2x3;
let m = Matrix2x3::new(1.0, 2.0, 3.0, 4.0, 5.0, 6.0);
assert_ne!(m.column_variance().transpose(), m.transpose().row_variance());
```
We can eliminate both the loss of precision the glaring inconsistency
by switching to the implementation provided by this PR.
For a comprehensive analysis of variance algorithms, see this
[reference](https://ds.ifi.uni-heidelberg.de/files/Team/eschubert/publications/SSDBM18-covariance-authorcopy.pdf ),
in particular, Table 2. The "two-pass" described in the paper is the
implementation given in this PR. In terms of simplicity (hence, easier
to maintain), "two-pass" is a suitable choice; in terms of runtime
performance and precision, it is a good balance (c.f. Youngs & Cramer
and "textbook"). Furthermore, it is consistent with the variance
algorithm used in the other "*variance" algorithms in the `statistics`
module.
2023-11-16 16:25:22 -08:00
Sébastien Crozet
a91e3b0d89
Merge pull request #1315 from yotamofek/owned-view-iter
...
Allow creating matrix iter with an owned view
2023-11-12 23:29:41 +01:00
Sébastien Crozet
83eccc6b8f
Merge pull request #1312 from arscisca/dev-DefaultTrait
...
Implement Default trait for sparse matrix types
2023-11-12 23:27:37 +01:00
Sébastien Crozet
2e99320d01
Merge pull request #1314 from rasmusgo/fix-svd-near-zero
...
Fix bug in SVD related to values near zero
2023-11-12 23:18:59 +01:00
Sébastien Crozet
c5276c90e1
cargo fmt
2023-11-12 23:17:33 +01:00
Sébastien Crozet
06b8d38970
fix no-std builds.
2023-11-12 23:17:17 +01:00
Sébastien Crozet
469390f4b9
Check norm_squared instead of mangnitude.
2023-11-12 23:12:52 +01:00
Sébastien Crozet
f8cd2d497d
Merge pull request #1308 from decathorpe/dev
...
Fix and clarify license in crate metadata and add missing license files
2023-11-12 23:04:32 +01:00
Yotam Ofek
1195eadd1a
Allow creating matrix iter with an owned view
2023-11-12 08:19:29 +00:00
Rasmus Brönnegård
7ea9ecee08
Test for axes with zero magnitude
2023-11-09 01:20:44 +01:00
Rasmus Brönnegård
03c24fb369
Add unit tests for issue 1313
2023-11-09 00:53:42 +01:00
Rasmus Brönnegård
b6e094c82f
Fix spelling in givens.rs
2023-11-09 00:48:13 +01:00
Alessandro Rocco Scisca
0887b875a5
Implement Default trait for sparse matrix types
2023-10-30 17:50:56 +00:00
Fabio Valentini
bad63b6423
Fix and clarify license in crate metadata and add missing license files
2023-10-24 18:33:53 +02:00
Sébastien Crozet
c6ff3eeb7e
Merge pull request #1265 from waywardmonkeys/fix-html-links
...
docs: Use intradoc links rather than HTML.
2023-09-30 18:24:28 +02:00
Sébastien Crozet
804e606c97
Merge pull request #1270 from waywardmonkeys/look-at-lh-is-left-handed
...
doc: Isometry's `look_at_lh` is left-handed.
2023-09-30 18:21:48 +02:00
Sébastien Crozet
d2d2571590
Merge pull request #1273 from waywardmonkeys/blackbox-criterion
...
Use std::hint::black_box consistently.
2023-09-30 18:20:09 +02:00
Sébastien Crozet
2043824058
Merge pull request #1281 from waywardmonkeys/clippy-single_component_path_imports
...
nalgebra-glm: Fix clippy single_component_path_imports.
2023-09-30 18:16:16 +02:00
Sébastien Crozet
1987ca29bb
Merge pull request #1282 from waywardmonkeys/clippy-needless-borrow
...
clippy: Fix needless_borrow warnings.
2023-09-30 18:15:42 +02:00
Sébastien Crozet
5a9d036226
Merge pull request #1283 from waywardmonkeys/dual-quaternion-wrong-self-convention
...
DualQuaternion: Fix to_vector self convention.
2023-09-30 18:13:23 +02:00
Sébastien Crozet
c9008ab859
Merge pull request #1284 from waywardmonkeys/glm-too-many-arguments
...
nalgebra-glm, clippy: Suppress too_many_arguments.
2023-09-30 17:56:16 +02:00
Sébastien Crozet
25749e3b89
Merge pull request #1288 from JulianKnodt/dev
...
Add `try_from_triplets_iter`
2023-09-30 17:55:41 +02:00
Sébastien Crozet
b39bd09eaa
chore: swap test names
2023-09-30 17:55:04 +02:00
Sébastien Crozet
542f6cf437
Merge pull request #1302 from mgeier/doc-norm_squared
...
DOC: Use norm_squared() in its doctest
2023-09-30 17:44:41 +02:00
Matthias Geier
87796ace42
DOC: Use norm_squared() in its doctest
2023-09-30 13:01:11 +02:00
julianknodt
666b0fd2de
Add `try_from_triplets_iter`
...
Calls `try_from_triplets` for now, and is mentioned in the documentation.
2023-08-22 22:19:42 -07:00
Bruce Mitchener
1b1d950f74
nalgebra-glm, clippy: Suppress too_many_arguments.
...
Matrix constructors need more args.
2023-08-19 01:00:01 +07:00
Bruce Mitchener
bfb84e8fc6
DualQuaternion: Fix to_vector self convention.
...
By taking a ref, we can avoid an extra copy on the caller side.
2023-08-19 00:52:59 +07:00
Bruce Mitchener
1d9a4bf6ec
clippy: Fix needless_borrow warnings.
2023-08-19 00:36:24 +07:00
Bruce Mitchener
8609167053
nalgebra-glm: Fix clippy single_component_path_imports.
...
These imports are redundant and not needed.
2023-08-19 00:19:42 +07:00
Andreas Borgen Longva
f404bcbd6d
Merge pull request #1279 from waywardmonkeys/clippy-less-lazy
...
clippy: Don't need lazy eval for len calls.
2023-08-15 11:01:13 +02:00
Andreas Borgen Longva
1e40308118
Merge pull request #1278 from waywardmonkeys/clippy-needless-return
...
clippy: Fix needless_return warnings.
2023-08-15 11:00:24 +02:00
Bruce Mitchener
cb2ed212ed
clippy: Don't need lazy eval for len calls.
2023-08-15 14:46:35 +07:00
Bruce Mitchener
76866ad878
clippy: Fix needless_return warnings.
2023-08-15 14:34:34 +07:00
Andreas Borgen Longva
6ac9d8995c
Merge pull request #1276 from waywardmonkeys/fix-rkyv-feature-doc-warnings
...
docs: Fix 2 warnings when building with rkyv.
2023-08-15 09:19:07 +02:00
Andreas Borgen Longva
02260161b1
Merge pull request #1277 from waywardmonkeys/unused-split
...
`split_at` is only used by Rayon code.
2023-08-15 09:18:54 +02:00
Bruce Mitchener
226761323f
docs: Fix 2 warnings when building with rkyv.
2023-08-14 17:23:59 +07:00
Bruce Mitchener
a2fd72dfb9
`split_at` is only used by Rayon code.
...
This fixes an unused code warning. Since the code is `pub(crate)`,
it was only available within the crate and only used by Rayon
code, so it is no functional change to not compile it except
when the right feature is enabled.
Also, fix a minor typo in some non-doc comments.
2023-08-14 17:21:45 +07:00
Andreas Borgen Longva
8d7763ab8f
Merge pull request #1275 from waywardmonkeys/no-default-features-unused-import-warnings
...
Fix import warnings when `--no-default-features`.
2023-08-14 08:57:45 +02:00
Andreas Borgen Longva
69b46cb7fa
Merge pull request #1260 from WarrenWeckesser/use-assert-macro
...
DOC: Fix compiler warning in the first example in lib.rs.
2023-08-14 08:53:24 +02:00
Andreas Borgen Longva
ec9a88c0ac
Merge pull request #1271 from waywardmonkeys/incorrect-usages-of-relative-eq
...
Use `assert_relative_eq!` instead of relative_eq!`.
2023-08-14 08:51:22 +02:00
Andreas Borgen Longva
3fdeeca09c
Merge pull request #1272 from waywardmonkeys/unused-lifetimes
...
clippy: Remove unused lifetimes.
2023-08-14 08:36:50 +02:00
Bruce Mitchener
14b00f6bf6
Fix import warnings when `--no-default-features`.
2023-08-14 11:40:03 +07:00
Bruce Mitchener
9042d1424c
Use std::hint::black_box consistently.
...
This also removes the `#![feature(bench_black_box)]`. This was
stabilized in Rust 1.66 and anyone building benchmarks will be
on that or later (as they previously would have been on nightly).
This also allows building `cargo build --all-targets` on stable
Rust as it no longer dies when hitting the feature addition in
the benchmarks.
2023-08-14 11:15:57 +07:00
Bruce Mitchener
a51886ed3f
clippy: Remove unused lifetimes.
2023-08-14 09:21:56 +07:00
Bruce Mitchener
8ba1459602
Use `assert_relative_eq!` instead of relative_eq!`.
...
When testing for something, need to use the assert form.
2023-08-12 22:48:16 +07:00
Bruce Mitchener
d0aa7f2090
doc: Isometry's `look_at_lh` is left-handed.
...
Fixes issue #734 .
2023-08-12 22:00:17 +07:00
Andreas Borgen Longva
32a07aca3c
Merge pull request #1267 from waywardmonkeys/docs-constraints-to-be
...
docs: grammar: "Constrains ... to be"
2023-08-10 09:02:16 +02:00
Andreas Borgen Longva
cd450c9e27
Merge pull request #1266 from waywardmonkeys/improve-view-alias-docs
...
docs: Improve view alias docs.
2023-08-10 09:01:44 +02:00
Bruce Mitchener
8f59f4dcf6
docs: grammar: "Constrains ... to be"
...
(Also pick up a small typo in a non-doc comment in the same area
of code.)
2023-08-10 10:59:14 +07:00