summaryrefslogtreecommitdiff
path: root/matrix.c
diff options
context:
space:
mode:
Diffstat (limited to 'matrix.c')
-rw-r--r--matrix.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/matrix.c b/matrix.c
index 646be42..222ad6d 100644
--- a/matrix.c
+++ b/matrix.c
@@ -20,6 +20,7 @@ Matrix *matrix_alloc(size_t m, size_t n)
mat->xs = xs;
mat->m = m;
mat->n = n;
+ mat->T = false;
return mat;
}
@@ -196,14 +197,19 @@ double matrix_trace(const Matrix *mat)
Matrix *matrix_transpose(const Matrix *mat)
{
- assert(mat != NULL && "Matrix points to null");
- assert(mat->xs != NULL && "Matrix elements point to null");
-
- Matrix *T = matrix_alloc(mat->n, mat->m);
- matrix_foreach_idx(T, t, i, j) *t = matrix_at(mat, j, i);
+ Matrix *T = matrix_copy(mat);
+ matrix_transpose1(T);
return T;
}
+void matrix_transpose1(Matrix *mat)
+{
+ size_t m = mat->m;
+ mat->m = mat->n;
+ mat->n = m;
+ mat->T = !mat->T;
+}
+
Matrix *matrix_add(const Matrix *A, const Matrix *B)
{
assert(A->m == B->m && A->n == B->n && "Dimension mismatch");