Ho una matrice. I valori validi non sono zero (positivo o negativo). Voglio trovare il minimo e il massimo all'interno dell'array che non dovrebbe tenere conto degli zeri. Ad esempio se i numeri sono solo negativi. Gli zeri saranno problematici.Trova gli zeri min/max esclusi in una matrice numpy (o una tupla) in python
risposta
ne dite:
import numpy as np
minval = np.min(a[np.nonzero(a)])
maxval = np.max(a[np.nonzero(a)])
dove a
è l'array.
Un modo semplice sarebbe utilizzare una comprensione di lista per escludere gli zeri.
>>> tup = (0, 1, 2, 5, 2)
>>> min([x for x in tup if x !=0])
1
L'OP sta cercando una soluzione per gli array di numpy, non per le tuple di pitone. Come nell'altro commento, non avrò downvote, ma questo non è rilevante per gli array numpy. – JoshAdel
Il titolo della domanda dice "in una matrice numpy (o una tupla)". – Wilduck
non ha visto la tupla nel titolo e legge solo la domanda che dice array. Sono corretto +1. Ho saltato su di te (e l'altra risposta), perché le persone pubblicano soluzioni a domande paralizzanti trattandole come se fossero elenchi di numpy, che non sono. È un vero peccato personale, dal momento che la soluzione numpy è spesso selvaggiamente più efficiente. – JoshAdel
È possibile utilizzare un generatore di espressione per filtrare gli zeri:
array = [-2, 0, -4, 0, -3, -2]
max(x for x in array if x != 0)
Penso che l'OP stia parlando di array numpy e non di liste python. C'è una differenza, anche se la tua soluzione è corretta per il futuro. Non andando a downvote, ma solo per quello che sai. – JoshAdel
Ah, ho appena visto l'array, non ho visto il tag numpy. –
Se è possibile scegliere il valore "non valido" nella propria matrice, è meglio utilizzare nan
invece di 0
:
>>> a = numpy.array([1.0, numpy.nan, 2.0])
>>> numpy.nanmax(a)
2.0
>>> numpy.nanmin(a)
1.0
Se questo non è possibile, si può usare una maschera di matrice:
>>> 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
Rispetto a Josh's answer using advanced indexing, questo ha il vantaggio di evitare di creare una copia dell'array.
cos'è questo ma ... non è un'altra copia? – Shan
+1 Gli array mascherati sono un'altra soluzione piacevole (e spesso inutilizzata) – JoshAdel
@Sven: quando faccio 'ma.base is a' ottengo false, quindi non sembra che' ma' sia solo una vista di 'a 'e c'è una copia della memoria da qualche parte. O sto provando questo nel modo sbagliato? – JoshAdel
Ecco un altro modo di mascherare che penso sia più facile da ricordare (anche se copia l'array). Per il caso in questione, va in questo modo:
>>> import numpy
>>> a = numpy.array([1.0, 0.0, 2.0])
>>> ma = a[a != 0]
>>> ma.max()
2.0
>>> ma.min()
1.0
>>>
Si generalizza ad altre espressioni come a> 0, numpy.isnan (a), ... E si può combinare maschere con operatori standard (+ significa OR, * significa AND, - significa NOT) ad esempio:
# 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. Trovare i zeri consecutivi in una matrice NumPy
- 2. avvolgere una matrice numpy in python
- 3. Reshape una matrice in NumPy
- 4. Strano comportamento della tupla indicizzazione di una matrice numpy
- 5. Come convertire una matrice in una tupla?
- 6. Trovare le righe che hanno tutti gli elementi come zeri in una matrice numpy
- 7. Cython forma matrice NumPy, assegnazioni tupla
- 8. Come creare una tupla di una tupla vuota in Python?
- 9. Filtra una matrice in Python3/Numpy e restituisce gli indici
- 10. Testare se NumPy matrice contiene solo zeri
- 11. Converte array numpy in tupla
- 12. gruppo da massima o minima in una matrice NumPy
- 13. Python: ridimensionare una matrice esistente e riempire di zeri
- 14. In Python, come faccio a contare gli zeri finali in una stringa o in un intero?
- 15. sostituire zeri in matrice numpy con il valore mediano
- 16. Come creare una matrice ortonormale casuale in python numpy
- 17. Flipping zeri e quelli in unidimensionale matrice NumPy
- 18. Come decidere se una matrice è singolare in python-numpy?
- 19. Contare gli zeri iniziali in una Int32
- 20. Python: come immagazzinare una matrice multidimensionale numpy in PyTables?
- 21. Salvataggio e caricamento di una matrice Numpy in python
- 22. come creare una matrice di similarità in python numpy?
- 23. Concatena tutte le righe di una matrice numpy in python
- 24. Trova il rettangolo più grande contenente solo zeri in una matrice binaria N × N
- 25. Sostituire gli zeri in un array intero NumPy con nan
- 26. Filtra una tupla con un'altra tupla in Python
- 27. trova un valore minimo in una matrice di float
- 28. Come creare una matrice di record numpy?
- 29. Trova stringa più comune in una matrice
- 30. Trova il massimo di ogni riga in una matrice numpy e l'elemento corrispondente in un'altra matrice della stessa dimensione
Qual è la tua domanda? Che cosa hai provato? Come non ha funzionato? –