El título lo dice todo.

Supongamos que tengo una matriz numpy que contiene valores que suman 1.

[0.5  0.3  0.1  0.05  0.03  0.01]

Y me gustaría eliminar todos los valores de la matriz que sean más pequeños que 0.05 y al mismo tiempo eliminar la columna correspondiente, lo que lleva a una matriz como esta:

[0.5  0.3  0.1  0.05]

Por supuesto, hay formas de lograr esto. Pero no estoy contento con el código que he producido hasta ahora. Siento que debe haber una forma elegante de lograr esto con Python.

Gracias por la ayuda

Editar:

Gracias por la ayuda. Siento que ya estaba en el camino correcto. Simplemente no sabía cómo usar la sintaxis todavía. Sin embargo, no entiendo los votos negativos. :(

0
Nima Mousavi 2 sep. 2014 a las 22:30

3 respuestas

La mejor respuesta
a = [0.5  0.3  0.1  0.05  0.03  0.01]
print a[a >= .05]
2
acushner 2 sep. 2014 a las 18:37

Parece que tiene una matriz 2D (a juzgar por la frase, "y al mismo tiempo eliminar la columna correspondiente ").

Si crea una matriz booleana, idx que es Verdadero para las columnas que desea conservar, puede seleccionar solo esas columnas usando arr[:, idx]:

import numpy as np
np.set_printoptions(formatter={'float': '{:0.2f}'.format})
np.random.seed(1)

arr = np.random.random((3,4))
mask = (arr < 0.05)
idx = mask.any(axis=0)
result = arr[:, ~idx]

print(arr)
# [[0.42 0.72 0.00 0.30]
#  [0.15 0.09 0.19 0.35]
#  [0.40 0.54 0.42 0.69]]

print(result)
# [[0.42 0.72 0.30]
#  [0.15 0.09 0.35]
#  [0.40 0.54 0.69]]
2
unutbu 2 sep. 2014 a las 18:42

numpy.delete es tu amiga

import numpy as np

a = np.array([0.5 , 0.3 , 0.1 , 0.05,  0.03,  0.01])
a = np.delete(a,np.where(a < 0.05))

np.delete(a, 1) creará una copia de a, luego eliminará a[1] de la copia. a aún no se ve afectado. Para forzar el cambio en a, haga hacemos a = np.delete(a,np.where(a < 0.05))

También np.delete también funciona para matrices de alta dimensión. Para datos de alta dimensión, debe trabajar más para elegir el np.where correcto

1
Anoop 2 sep. 2014 a las 18:45