Let a = np.arange(1, 4).
To get the 2 dimensional multiplication table for a, I do:
>>> a * a[:, None]      
>>> array([[1, 2, 3],
           [2, 4, 6],
           [3, 6, 9]])
For 3 dimensions, I can do the following:
>>> a * a[:, None] * a[:, None, None] 
>>> array([[[ 1,  2,  3],
            [ 2,  4,  6],
            [ 3,  6,  9]],
           [[ 2,  4,  6],
            [ 4,  8, 12],
            [ 6, 12, 18]],
           [[ 3,  6,  9],
            [ 6, 12, 18],
            [ 9, 18, 27]]])
How could I write a function that takes a numpy array a and a number of dimensions n as input and ouputs the n dimensional multiplication table for a?
Advertisement
Answer
This should do what you need:
import itertools
a = np.arange(1, 4)
n = 3
def f(x, y):
    return np.expand_dims(x, len(x.shape))*y
l = list(itertools.accumulate(np.repeat(np.atleast_2d(a), n, axis=0), f))[-1]
Just change n to be whatever dimension you need
