Linspace NumPy vectorizado a través de matrices multidimensionales

Digamos que tengo 2 arrays 2D, minutos y máximos, que siempre tendrán la misma dimensión entre sí. Me gustaría crear una tercera matriz, resultados, que es el resultado de aplicar linspace al valor máximo y mínimo. ¿Hay alguna forma “numpy” / vectorizada de hacer esto? A continuación se muestra un ejemplo de código no vectorizado para mostrar los resultados que me gustaría.

import numpy as np mins = np.random.rand(2,2) maxs = np.random.rand(2,2) # Number of elements in the linspace x = 3 m, n = mins.shape results = np.zeros((m, n, x)) for i in range(m): for j in range(n): min = mins[i][j] max = maxs[i][j] results[i][j] = np.linspace(min, max, num=x) 

Aquí hay un enfoque vectorizado basado en this post para cubrir casos generics de n-dim:

 def create_ranges_nd(start, stop, N, endpoint=True): if endpoint==1: divisor = N-1 else: divisor = N steps = (1.0/divisor) * (stop - start) return start[...,None] + steps[...,None]*np.arange(N) 

Ejecución de la muestra

 In [536]: mins = np.array([[3,5],[2,4]]) In [537]: maxs = np.array([[13,16],[11,12]]) In [538]: create_ranges_nd(mins, maxs, 6) Out[538]: array([[[ 3. , 5. , 7. , 9. , 11. , 13. ], [ 5. , 7.2, 9.4, 11.6, 13.8, 16. ]], [[ 2. , 3.8, 5.6, 7.4, 9.2, 11. ], [ 4. , 5.6, 7.2, 8.8, 10.4, 12. ]]])