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}