|
Boost : |
From: Dave Steffen (steffend_at_[hidden])
Date: 2001-03-12 20:32:56
Howard Hinnant writes:
> >It's not crazy to imagine *inner* and *outer*. Of course we might
> >need to use 2 separate namespaces for the different defaults of
> >plain operator* ;-(.
>
> This is coming completely out of the blue, and I don't yet know how
> to implement it. But terms like *inner* and *outer* can be
> limiting. Tensor notation can be very liberating. It would be
> cool if we could do something like:
>
> TensorIndex i, j, k, l;
>
> A[i][j][l] = B[i][k] * C[k][j] * D[k][l] * E[k];
>
> Probably just a pipe dream...
Not at all - this is more or less how Blitz++ does it, although the
syntax isn't quite as clean. It looks something like
A = sum(B(i,k) * C(k,j), k); // A_ij = B_ik * C_jk
Yes, it would be nice if your example generated code that only had
one loop (summing on k) instead of 4; but this is exactly the kind of
problem that (AFAIK) Blitz++ is trying to solve.
While it'd be really nice to implement full-blown tensor notation, I
suspect that
A) most people really only use vectors and matrices, so we
don't really need higher-rank tensors right away;
B) most people really just need inner and outer products, so
if we can get those right, we're in reasonably good shape;
C) most people need _either_ inner _or_ outer products in
a given project; that is, the number of programming tasks
requiring _both_ inner _and_ outer products is fairly
small.
I also suspect that deciding whether operator*() implements an inner
or outer product will generate a lot of heat, and either way people
won't be happy. It would be nice to allow both; there are several
mechanisms that might do the trick.
So: I'd restrict our efforts to first and second order tensors
(i.e. vectors and matrices), and settle for writing
A = B * C * D;
for the product of three matrices.
--------------------------------------------------------------------------
Dave Steffen Wave after wave will flow with the tide
Dept. of Physics And bury the world as it does
Colorado State University Tide after tide will flow and recede
steffend_at_[hidden] Leaving life to go on as it was...
- Peart / RUSH
"The reason that our people suffer in this way....
is that our ancestors failed to rule wisely". -General Choi, Hong Hi
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk