gsl_matrix_hconcat(const gsl_matrix * A,const gsl_matrix * B)1 gsl_matrix *gsl_matrix_hconcat(const gsl_matrix *A,
2 const gsl_matrix *B) {
3 int colsA, colsB, rows;
4 gsl_matrix_view Aview, Bview;
5 gsl_matrix *C;
6
7 if (A->size1 != B->size1) return NULL;
8 rows = A->size1;
9 colsA = A->size2;
10 colsB = B->size2;
11
12 C = gsl_matrix_alloc( rows, colsA + colsB);
13 if (!C) return NULL;
14
15 Aview = gsl_matrix_submatrix(C, 0, 0, rows, colsA);
16 Bview = gsl_matrix_submatrix(C, 0, colsA, rows, colsB);
17
18 gsl_matrix_memcpy(&Aview.matrix, A);
19 gsl_matrix_memcpy(&Bview.matrix, B);
20
21 return C;
22 }
23
gsl_matrix_vconcat(const gsl_matrix * A,const gsl_matrix * B)24 gsl_matrix *gsl_matrix_vconcat(const gsl_matrix *A,
25 const gsl_matrix *B) {
26 int cols, rowsA, rowsB;
27 gsl_matrix_view Aview, Bview;
28 gsl_matrix *C;
29
30 if (A->size2 != B->size2) return NULL;
31 cols = A->size2;
32 rowsA = A->size1;
33 rowsB = B->size1;
34
35 C = gsl_matrix_alloc( rowsA + rowsB, cols);
36 if (!C) return NULL;
37
38 Aview = gsl_matrix_submatrix(C, 0, 0, rowsA, cols);
39 Bview = gsl_matrix_submatrix(C, rowsA, 0, rowsB, cols);
40
41 gsl_matrix_memcpy(&Aview.matrix, A);
42 gsl_matrix_memcpy(&Bview.matrix, B);
43
44 return C;
45 }
46
gsl_matrix_random(const gsl_matrix * A)47 void gsl_matrix_random(const gsl_matrix *A){
48 int i, j, rows, cols;
49 rows = A->size1;
50 cols = A->size2;
51
52 for( i = 0; i < rows; i++)
53 for( j = 0; j < cols; j++ )
54 gsl_matrix_set (A, i, j, ((float)rand() / RAND_MAX));
55
56 }
57
58
59