Similar a esta pregunta de Matlab, me pregunto cómo truncar una matriz numpy cortando los valores mayores que un cierto valor umbral Los valores de la matriz en cuestión están en orden ascendente.

import numpy as np
a=np.linspace(1,10,num=10)
truncatevalue = 5.5

¿Cómo produciría una matriz que tenga los valores de a que sean menores que truncatevalue y solo incluya esos valores? En este caso, la matriz resultante sería

a_truncated=([1., 2., 3., 4., 5.])

Bonificación: en realidad tengo dos matrices que me gustaría truncar en función de los valores en una de las matrices.

import numpy as np
a=np.linspace(1,10,num=10)
b=np.array([19, 17, 15, 14, 29, 33, 28, 4, 90, 6])
truncatevalue = 5.5

b es una matriz arbitraria, solo elegí algunos números para un ejemplo definitivo. Me gustaría truncar b de la misma manera que a se trunca, para que el resultado sea

a_truncated=([1., 2., 3., 4., 5.])
b_truncated=([19, 17, 15, 14, 29])

No sé si será tan simple como simplemente repetir lo que se debe hacer para obtener a_truncated o no, por lo que quería incluirlo también en caso de que haya algo diferente que deba hacerse.

1
NeutronStar 30 ago. 2014 a las 00:30

2 respuestas

La mejor respuesta

Puede usar la indexación booleana:

>>> a = np.linspace(1, 10, num=10)
>>> truncatevalue = 5.5
>>> a_truncated = a[a < truncatevalue]
>>> a_truncated
array([ 1.,  2.,  3.,  4.,  5.])

Esencialmente, a < truncatevalue devuelve una matriz booleana que indica si el elemento de a cumple o no la condición. El uso de esta matriz booleana para indexar a devuelve una vista de a en la que el índice de cada elemento es True.

Entonces, para la segunda parte de su pregunta, todo lo que necesita hacer es esto:

>>> b = np.array([19, 17, 15, 14, 29, 33, 28, 4, 90, 6])
>>> b_truncated = b[a < truncatevalue]
>>> b_truncated
array([19, 17, 15, 14, 29])
7
Alex Riley 29 ago. 2014 a las 21:00
a_truncated = [value for value in a if value < truncateValue]
-3
Paymahn Moghadasian 29 ago. 2014 a las 20:34