[Numpy-discussion] Tensor-like product with extra indices?

Fri Sep 13 03:34:02 CDT 2002

```Huaiyu Zhu <huaiyu_zhu at yahoo.com> writes:

> Two related questions:
>
> 1. Suppose  B = ravel(A) and
>             B[i] corresponds to A[i0,i1,...].
>
>    Are there named functions that map the indices
>
>         (i0,i0,...) -> i
>
>    and back?  This is assuming A.shape = (m0,m1,...) is known.

Untested, but the idea should work:

def ravel_index(array, *indices):
offsets = Numeric.multiply.accumulate(array.shape[1:][::-1])[::-1]
return Numeric.sum(Numeric.array(indices[:-1])*offsets) + indices[-1]

> 2. Suppose the above function is called ravel_index and its
>    inverse unravel_index.
>
>    Given a list of matrices [A0, A1, ...] is there a function that
>    calculates a matrix B such that
>
>         B[i,j]  = A0[i0,j] * A1[i1,j] * ...
>
>    where i = ravel_index(i0, i1, ...).

Not for all i, which I assume is what you want to do.

--
-------------------------------------------------------------------------------
Konrad Hinsen                            | E-Mail: hinsen at cnrs-orleans.fr
Centre de Biophysique Moleculaire (CNRS) | Tel.: +33-2.38.25.56.24
Rue Charles Sadron                       | Fax:  +33-2.38.63.15.17
45071 Orleans Cedex 2                    | Deutsch/Esperanto/English/
France                                   | Nederlands/Francais
-------------------------------------------------------------------------------

```