rust_linear_algebra/matrix/
rank.rs1use super::Matrix;
2use crate::num::MinusOne;
3use crate::num::One;
4use std::fmt::Debug;
5use std::ops::{Add, Div, Mul, Sub, SubAssign};
6
7impl<K> Matrix<K>
8where
9 K: Debug
10 + Copy
11 + One
12 + MinusOne
13 + Default
14 + PartialEq
15 + Add<Output = K>
16 + Sub<Output = K>
17 + SubAssign<K>
18 + Mul<Output = K>
19 + Div<Output = K>,
20{
21 pub fn rank(&self) -> usize {
22 let result = self.row_echelon();
23 let mut rank = 0;
24
25 for row in 0..result.rows() {
26 if result.elements[row].iter().any(|&x| x != K::default()) {
27 rank += 1;
28 }
29 }
30
31 rank
32 }
33}