[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
## Re: [Help-gsl] Resizing vectors and matrices

**From**: |
ake |

**Subject**: |
Re: [Help-gsl] Resizing vectors and matrices |

**Date**: |
Wed, 15 Sep 2004 09:39:42 +0200 |

At 06:52 PM 9/14/2004, JDL wrote:

`You could look at how the C++ standard template library allows you to
``increase the size of a vector. This uses two numbers: the size is what you
``use and the capacity is what you have available. You can resize (change
``the size) whenever you want. If the new size exceeds the capacity, you
``create new vectors with capacity the first power of two bigger than the
``new size, copy and reassign.
`

`I have looked briefly at init_source.c in the block and vector directory of
``gsl-1.5, and it seems to me that all one needs to do is to add functions
``gsl_vector_realloc and gsl_block_realloc. The latter function should
``reallocate space for block->data and update block->size. Then
``gsl_vector_realloc calls gsl_block_realloc and makes appropriate changes if
``need to vector->data, vector->size and vector->block. That should be all,
``or have I missed something of importance?
`

`Matrices seem more difficult since element (i,j) of an (m,n) matrix is
``identified from a vector as matrix->data[i * m + j], ignoring the fact that
``the physical size may differ from the actual size. Thus, increasing n to n
``+ k is straigtforward, just allocate k * m additional slots at the end of
``matrix->data, but increasing m is not trivial. It may be that the matrix
``has to be copied onto a new one of the appropriate size.
`
Sincerely,
Ake Brannstrom