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 [A0,A1,...]. 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,)]) Huaiyu
participants (2)
-
Huaiyu Zhu
-
Konrad Hinsen