This is the mail archive of the gsl-discuss@sources.redhat.com mailing list for the GSL project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

package tensor


Hi,

I have prepared a package to do tensor manipulation. It is the update of a 
version I did some time ago but which did not work well for some subtle bug 
(I've talked about it before in the list, so you probably know that already). 
Now it is fixed and all the basic functions are working.

Some comments:
* it is a package, following the recent suggestion by Brian
* it is fully functional, complex numbers excluded.
* its interface mimics that of gsl_matrix
* it still uses varargs, though I am considering to use int* for the set of 
tensor indices instead.
* I am working on a modified version, "gtensor", which allows for different 
dimensions on each index, suited for multidimensional grids (but then, not 
for operations such as tensor product or index contraction).

To try it one just needs to
     $ bunzip2 tensor-0.9.tar.bz2
     $ tar xvf tensor-0.9.tar 
     $ cd tensor-0.9
     $ ./autogen.sh && ./configure && make && make check && make install
     $ ...
     $ gcc -Wall main.c -lgsltensor -lgsl -lgslcblas -lm


And finally an example:

/* define a 2x2x2 "cube" (rank=3, dimension=2)
 * t = [ [ [1 2] [3 4] ] [ [5 6] ] [ [7 8] ] ]
 */
gsl_tensor * t = gsl_tensor_alloc(3, 2);
count = 1;
for (i = 0; i < 2; i++)
  for (j = 0; j < 2; j++)
    for (k = 0; k < 2; k++)
       gsl_tensor_set(t, count++, i,j,k);  /* rank 3, 3 indices */

/* when we contract indices 0,1 we get a tensor of rank 1 (a vector) */
gsl_tensor * v = gsl_tensor_contract(t, 0, 1);

for (i = 0; i < 2; i++)
  printf("%g\t", gsl_tensor_get(v, i));  /* rank 1, so just 1 index */

/* swapping indices generalizes the transpose of a matrix */
gsl_tensor * tt = gsl_tensor_swap_indices(t, 1, 2);

/* the tensor product creates tensors of higher rank */
gsl_tensor * p = gsl_tensor_product(t, v);


The attached file contains the code. Enjoy,
Jordi

Attachment: tensor-0.9.tar.bz2
Description: application/tbz

Attachment: pgp00000.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]