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