Περισσότερα
Αντικατάσταση όλων των στοιχείων του Python NumPy Array που είναι μεγαλύτερα από κάποια τιμή
Έχω έναν πίνακα 2D NumPy και θα ήθελα να αντικαταστήσω όλες τις τιμές σε αυτόν που είναι μεγαλύτερες ή ίσες από ένα κατώφλι T με 255,0. Απ' όσο γνωρίζω, ο πιο θεμελιώδης τρόπος θα ήταν ο εξής:
shape = arr.shape
result = np.zeros(shape)
for x in range(0, shape[0]):
for y in range(0, shape[1]):
if arr[x, y] >= T:
result[x, y] = 255
-
Ποιος είναι ο πιο συνοπτικός και πυθωνικός τρόπος για να γίνει αυτό;
-
Υπάρχει ταχύτερος (ενδεχομένως λιγότερο συνοπτικός ή/και λιγότερο πυθωνικός) τρόπος για να γίνει αυτό;
Αυτό θα αποτελέσει μέρος μιας υπορουτίνας ρύθμισης παραθύρου/επιπέδου για μαγνητικές τομογραφίες του ανθρώπινου κεφαλιού. Ο πίνακας numpy 2D είναι τα δεδομένα εικονοστοιχείων της εικόνας.
165
3
Νομίζω ότι τόσο ο ταχύτερος όσο και ο πιο συνοπτικός τρόπος για να το κάνετε αυτό είναι να χρησιμοποιήσετε την ενσωματωμένη ευρετηρίαση Fancy της NumPy's. Αν έχετε μια
ndarray
με όνομαarr
, μπορείτε να αντικαταστήσετε όλα τα στοιχεία>255
με μια τιμήx
ως εξής:Το έτρεξα αυτό στο μηχάνημά μου με έναν τυχαίο πίνακα 500 x 500, αντικαθιστώντας όλες τις τιμές >0,5 με 5, και χρειάστηκαν κατά μέσο όρο 7,59ms.
Μπορείτε να εξετάσετε το ενδεχόμενο να χρησιμοποιήσετε numpy.putmask:
Εδώ είναι μια σύγκριση επιδόσεων με την ενσωματωμένη ευρετηρίαση του Numpy's: