rust_linear_algebra/matrix/
rank.rs

1use 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}