opis/matrix/
transpose.rs

1use crate::Matrix;
2use std::error::Error;
3
4impl<T: Clone> Matrix<T> {
5    
6    pub fn transpose(&self) -> Result<Matrix<T>, Box<dyn Error>> {
7
8        let (_, columns) = self.dimensions()?;
9        
10        Ok(
11            Matrix(
12                (0..columns)
13                    .into_iter()
14                    .map(|column| {
15                        self.0
16                            .iter()
17                            .map(|row| { row[column].clone() })
18                            .collect()
19                    })
20                    .collect()
21            )
22        )
23
24    }
25
26}
27
28#[cfg(test)]
29mod tests {
30    
31    use super::*;
32    #[test]
33    fn test_matrix_transpose() {
34
35        let a = Matrix(vec![vec![2,0], vec![1,1], vec![4,3]]);
36
37        let a_transpose = Matrix(vec![vec![2,1,4], vec![0,1,3]]);
38
39        assert_eq!(a.transpose().unwrap(), a_transpose);
40    }
41
42}