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

Huaiyu Zhu huaiyu_zhu at yahoo.com
Fri Sep 13 01:46:03 CDT 2002

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.

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, ...).

   What about the inverse function that turns B into C such that

        C[i0,i1,...,j] = A0[i0,j] * A1[i1,j] * ...

I've considered reshape, ravel, take, put, outerproct but couldn't come
up with a combination to do it without a for-loop on j and a for-loop on

The above two questions I need answers right now.  But I can imagine a
need for a more general operations in the future.  Given a sequence of
arrays [A0,A1,...], produce a tensor product by picking certain indices
from each array (like i0,i1 above), while keeping some other indices
fixed (like j above).  For example, the above could be written as

        B = tensor_like([A0,A1...], [(0,None,None,...), ...,
                                (None,....,None,0), (1,1,...1)])

As another example, if len(A.shape)==3 then

        transpose(A) == tensor_like([A], [(2,), (1,), (0,)])


More information about the Numpy-discussion mailing list