Saltar al contenido

Cambiar el tamaño y estirar un NumPy array

Ten en cuenta que en las ciencias un problema suele tener más de una soluciones, de igual modo nosotros aquí mostramos lo más óptimo y mejor.

Solución:

La respuesta de @KennyTM es muy ingeniosa y realmente funciona para su caso, pero como alternativa que podría ofrecer un poco más de flexibilidad para expandir matrices, intente np.repeat:

>>> a = np.array([[1, 5, 9],
              [2, 7, 3],
              [8, 4, 6]])

>>> np.repeat(a,2, axis=1)
array([[1, 1, 5, 5, 9, 9],
       [2, 2, 7, 7, 3, 3],
       [8, 8, 4, 4, 6, 6]])

Entonces, esto logra repetir a lo largo de un eje, para obtenerlo a lo largo de múltiples ejes (como es posible que desee), simplemente anide el np.repeat llamadas:

>>> np.repeat(np.repeat(a,2, axis=0), 2, axis=1)
array([[1, 1, 5, 5, 9, 9],
       [1, 1, 5, 5, 9, 9],
       [2, 2, 7, 7, 3, 3],
       [2, 2, 7, 7, 3, 3],
       [8, 8, 4, 4, 6, 6],
       [8, 8, 4, 4, 6, 6]])

También puede variar el número de repeticiones para cualquier fila o columna inicial. Por ejemplo, si quisiera dos repeticiones de cada fila además de la última fila:

>>> np.repeat(a, [2,2,1], axis=0)
array([[1, 5, 9],
       [1, 5, 9],
       [2, 7, 3],
       [2, 7, 3],
       [8, 4, 6]])

Aquí cuando el segundo argumento es un list especifica filas (filas en este caso porque axis=0) se repite para cada fila.

>>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]])
>>> numpy.kron(a, [[1,1],[1,1]])
array([[1, 1, 5, 5, 9, 9],
       [1, 1, 5, 5, 9, 9],
       [2, 2, 7, 7, 3, 3],
       [2, 2, 7, 7, 3, 3],
       [8, 8, 4, 4, 6, 6],
       [8, 8, 4, 4, 6, 6]])

Desafortunadamente, numpy no permite pasos fraccionarios (que yo sepa). Aquí hay una solución. No es tan inteligente como la solución de Kenny, pero utiliza la indexación tradicional:

>>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]])
>>> step = .5
>>> xstop, ystop = a.shape
>>> x = numpy.arange(0,xstop,step).astype(int)
>>> y = numpy.arange(0,ystop,step).astype(int)
>>> mg = numpy.meshgrid(x,y)
>>> b = a[mg].T
>>> b
array([[1, 1, 5, 5, 9, 9],
       [1, 1, 5, 5, 9, 9],
       [2, 2, 7, 7, 3, 3],
       [2, 2, 7, 7, 3, 3],
       [8, 8, 4, 4, 6, 6],
       [8, 8, 4, 4, 6, 6]])

(la solución de dtlussier es mejor)

Comentarios y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *