Commit Graph

2721 Commits

Author SHA1 Message Date
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