Corte avanzado Numpy

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.

preguntado el 03 de mayo de 12 a las 18:05

1 Respuestas

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

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 Campbell

Realicé 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

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.