Corte avanzado Numpy
Frecuentes
Visto 1,630 veces
1
Estoy tratando de dividir la siguiente matriz para obtener las filas 2 y 3 y la primera columna, además de las columnas entre la segunda y la última columna, pero cada porción que probé no parece funcionar. Por ejemplo, la primera declaración de impresión a continuación da un error de sintaxis debido al : entre corchetes. También he intentado simplemente concatenar las matrices, pero no creo que esta sea la forma más eficiente de resolver este problema.
import numpy as np
y = np.arange(35).reshape(5, 7)
# My ultimate goal is to do a slice similar to this expression, but this of course gives
# an error.
print y[[1, 2], [0, 2:-1]]
# This works, but I feel it is inefficient, although I could be wrong.
print np.hstack((y[[1, 2], 0][:, np.newaxis], y[[1, 2], 2:-1]))
Cualquier sugerencia sería muy apreciada.
1 Respuestas
2
no se si es lo que pides pero prueba
In [11]: y[2:4,[1,3,4,5,6]]
Out[11]:
array([[15, 17, 18, 19, 20],
[22, 24, 25, 26, 27]])
In [12]:
Numpy se puede dividir de manera similar a las listas estándar de Python, pero las dimensiones agregan algo de dificultad, pero aún encuentro que esta solución es realmente elegante en comparación con las remodelaciones anidadas o en bucle, pero a veces esta no siempre será la solución final.
Edit:
No se ve bien, pero es mejor que una remodelación o grandes cambios de matriz.
Esto es lo mismo que decir y[1:3, [0, 2:-1]]
sin tener que remodelar la matriz o iterar a través de los elementos sobrantes, puede especificar los índices que le interesan haciendo una lista de [0] +
las columnas restantes en esa dimensión.
In [33]: y[1:3, [0] + list(xrange(2,y.shape[1]))]
Out[33]:
array([[ 7, 9, 10, 11, 12, 13],
[14, 16, 17, 18, 19, 20]])
contestado el 03 de mayo de 12 a las 19:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python numpy slice or haz tu propia pregunta.
Lo siento, no fui lo suficientemente específico. La razón por la que necesito las columnas 2:-1 es que a veces tendré más columnas en el medio, pero nunca al principio o al final de la matriz. - hotshotiguana
Si lo hace
y[2:4,1:-1]
tendrá las filas 2,3, XNUMX y todas las columnas 'interiores'. - Luke CampbellRealicé una edición a la pregunta original, ya que necesito la primera columna además de las columnas 'interiores'. - hotshotiguana
No me gusta el vea cualquiera de los dos, pero hace el trabajo, estaría muy emocionado de ver algún soporte de operador en Python que admitiera este tipo de corte (como en su pregunta). - Luke Campbell