I would like to implement a function that takes what I call the "tensor power" of an one-dimensional numpy array:
def tensor_pow(x: np.ndarray, n: int) -> np.ndarray:
# code goes here
return y
For any numpy array x of shape (Nx), the output y should be a numpy array of shape (Nx, ..., Nx) where there are n copies of Nx, and its entries are defined as y[i, j, ..., k] = x[i] * x[j] * ... * x[k]. A simple example would be:
y = tensor_pow(np.arange(3), 2) # an array of shape (3, 3)
y[1, 2] == 2 # returns True
Is there any easy way to achieve this?
I think you cannot avoid an explicit loop over
n. If the tensor becomes large, you may want some more complex structure that makes use of the permutation symmetries.