Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

138
Views
Elimine toda la matriz 3d si contiene algún nan

Tengo un conjunto de imágenes representadas por un ndarray 3d. En resumen, lo que quiero hacer es eliminar una imagen completa si alguno de sus valores de píxel es un nan. Imagina que tenemos el siguiente ndarray:

 a = np.arange(18).reshape(3, 2, 3) a = 1.0 * a a[0][0][1] = np.nan a[1][0][0] = np.nan a [[[ 0. nan 2.] [ 3. 4. 5.]] [[nan 7. 8.] [ 9. 10. 11.]] [[12. 13. 14.] [15. 16. 17.]]]

Ahora lo que quiero obtener es una función que dado que ndarray devuelve True, True, False. Para finalmente usar np.delete.

He probado lo siguiente, que funciona:

 np.delete(a, [np.isnan(image.flatten()).any() for image in a], axis=0) array([[[12., 13., 14.], [15., 16., 17.]]]))

Sin embargo, me cuesta creer que no haya una función en numpy que sea más eficiente, y dado que tengo muchas imágenes, me gustaría optimizarla tanto como sea posible.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Como ya respondió Michael Szczesny, una forma más pitónica sería:

 filtered_images=a[~np.isnan(a).any(axis=(2,1))]

Si ese fragmento de código es difícil de entender, considere extraer cada imagen con un bucle for de la siguiente manera:

 filtered_images=list() for value in a: if(np.isnan(value).any()!=True): filtered_images.append(value)

¡Ambos enfoques deberían darte un resultado similar!

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!