Starting with a linspace
t = np.linspace(0,10, 100)
and an array
a = np.array([1,2,44,2, 13,...])
I would like to get an array b
, of the same length of the linspace
whose elements are the array a
raised to the power of the linspace elements (without using a for-loop). So you'd have something like
b[0]=np.array([1^t[0], 2^t[0], 44^t[0],...])
b[1]=np.array([1^t[1], 2^t[1], 44^t[1],...])
etc for the whole linspace.
Since I don't want to use a for-loop, is it possible to use np.apply_along_axis
to perform a function on every element of t
that gives me the final b
I want? I've been struggling to do this, I think because I must just not understand how np.apply_along_axis
works entirely.
Use broadcasting:
If you raise an array a
of shape (N,)
or (1, N)
(a row vector) to an array t
of shape (M, 1)
(a column vector), numpy automatically broadcasts their shapes and returns an array of shape (M, N)
, where the i, j
th element of that array is a[j]**t[i]
. To represent your t
array as a column vector, index it as t[:, None]
, which adds a dimension after the current one.
a = np.array([1,2,44,2, 13,...])
t = np.linspace(0,10, 100)
b = a**t[:, None]