Tengo una matriz. Los valores válidos no son cero (ya sea positivo o negativo). Quiero encontrar el mínimo y el máximo dentro de la matriz que no deberían tener en cuenta los ceros. Por ejemplo, si los números son solo negativos. Zeros será problemático.Encuentra el min/max excluyendo ceros en una matriz numpy (o una tupla) en python
Respuesta
¿Qué tal:
import numpy as np
minval = np.min(a[np.nonzero(a)])
maxval = np.max(a[np.nonzero(a)])
donde a
es su matriz.
Una manera simple sería usar una lista de comprensión para excluir ceros.
>>> tup = (0, 1, 2, 5, 2)
>>> min([x for x in tup if x !=0])
1
OP está buscando una solución para matrices numpy, no tuplas de pitón. Como en el otro comentario, no voy a downvote, pero esto no es relevante para matrices numpy. – JoshAdel
El título de la pregunta dice "en una matriz numpy (o una tupla)". – Wilduck
no vi tupla en el título y solo leí la pregunta que dice matriz. Me corresponde corregido +1. Salté sobre ti (y la otra respuesta), porque la gente publica soluciones a preguntas numpy tratándolos como si fueran listas numpy, que no lo son. Es un motivo de preocupación personal, ya que la solución numpy a menudo es mucho más eficiente. – JoshAdel
Se podría utilizar una expresión generador para filtrar los ceros:
array = [-2, 0, -4, 0, -3, -2]
max(x for x in array if x != 0)
Creo que OP está hablando de matrices numpy y no de listas de Python. Hay una diferencia, aunque su solución es correcta para el posterior. No va a downvote, pero solo para que lo sepas. – JoshAdel
Ahh, acabo de ver una matriz, no vi la etiqueta numpy. –
Si se puede elegir el valor "no válido" en su conjunto, es mejor utilizar nan
en lugar de 0
:
>>> a = numpy.array([1.0, numpy.nan, 2.0])
>>> numpy.nanmax(a)
2.0
>>> numpy.nanmin(a)
1.0
Si esto no es posible, se puede utilizar una máscara de matriz:
>>> a = numpy.array([1.0, 0.0, 2.0])
>>> ma = numpy.ma.masked_equal(a, 0.0, copy=False)
>>> ma.max()
2.0
>>> ma.min()
1.0
Comparado con Josh's answer using advanced indexing, esto tiene la ventaja de evitar crear una copia de la matriz.
¿Qué es esta ma ... no es otra copia? – Shan
+1 Las matrices enmascaradas son otra solución agradable (ya menudo no utilizada) – JoshAdel
@Sven: cuando 'ma.base es un' obtengo falso, por lo que no parece 'ma' es solo una vista de' a 'y hay una copia de la memoria en alguna parte. ¿O estoy probando esto de la manera incorrecta? – JoshAdel
Aquí hay otra forma de enmascarar que creo que es más fácil de recordar (aunque sí copia la matriz). Para el caso en cuestión, que es la siguiente:
>>> import numpy
>>> a = numpy.array([1.0, 0.0, 2.0])
>>> ma = a[a != 0]
>>> ma.max()
2.0
>>> ma.min()
1.0
>>>
Se generaliza a otras expresiones como a> 0, numpy.isnan (a), ... Y puede combinar con máscaras operadores estándar (+ significa O, * significa AND, - significa NO) eg:
# Identify elements that are outside interpolation domain or NaN
outside = (xi < x[0]) + (eta < y[0]) + (xi > x[-1]) + (eta > y[-1])
outside += numpy.isnan(xi) + numpy.isnan(eta)
inside = -outside
xi = xi[inside]
eta = eta[inside]
- 1. Cómo declarar una matriz de ceros en Python (o una matriz de cierto tamaño)
- 2. ¿Puedo poner una tupla en una matriz en Python?
- 3. ¿Cómo cambiar una tupla en una matriz en Python?
- 4. ¿Convertir lista en tupla a matriz numpy?
- 5. envolviendo una matriz numpy en python
- 6. Convertir numpy array en tupla
- 7. un mejor uso de una tupla o matriz numpy para almacenar coordenadas
- 8. ¿Cómo encontrar el valor mínimo en una matriz numpy?
- 9. Grupo por max o min en una matriz numpy
- 10. Convertir una matriz numpy 2D en una matriz estructurada
- 11. ¿Ver en una matriz numpy?
- 12. Encuentra el valor más cercano en la matriz numpy
- 13. Creando una matriz en numpy/scipy por iteración en Python?
- 14. Convertir una matriz 1D en una matriz 2D en numpy
- 15. "pintar" una matriz en otra usando python/numpy
- 16. Clasifique los elementos en una matriz usando Python/NumPy
- 17. Python - NumPy - tuplas como elementos de una matriz
- 18. ¿Cómo normalizar una matriz numpy bidimensional en python menos detallada?
- 19. ¿Cómo guardar una lista como matriz numpy en python?
- 20. Guardar y cargar una matriz Numpy en python
- 21. ¿Cómo convertir una matriz a una Tupla?
- 22. Python (NumPy, SciPy), encontrar el espacio nulo de una matriz
- 23. Encontrar valores faltantes en una matriz numpy
- 24. Autocorrelación de una matriz multidimensional en numpy
- 25. Eliminar una columna para una matriz numpy
- 26. ¿Qué significa matriz ** 2 en python/numpy?
- 27. Mejorando el rendimiento de las operaciones en una matriz NumPy
- 28. ¿Cómo crear una matriz de registro numpy?
- 29. ¿Cómo crear una matriz de enteros en Python?
- 30. Scipy interpolación en una matriz de numpy
¿Cuál es su pregunta? ¿Qué has intentado? ¿Cómo no funcionó? –