2017-12-25 13 views
0

Ich versuche, eine Teilmenge eines größeren Gitters auszuwählen, um eine Finite-Elemente-Analyse durchzuführen, um zwischen zwei Arrays zu iterieren; ein maskiertes Array und ein unmaskiertes Array, aber ich bin auf ein Problem von NaNs gestoßen, die von der Maske erscheinen, wenn np.arrays verwendet werden. Ich verwendete ursprünglich Masken hier, um zu versuchen vermeiden NaN Probleme einschließlich NaN == NaN (False) etc ... aber die Maske selbst scheint NaNs zu erstellen, wenn mit np.arrays verwendet!Python-maskierte Arrays, die NaNs mit np.array erzeugen

Arrays Koordinate über iterieren:

array = np.array(list(np.arange(5))*5).reshape(5,5) 
big_array = np.array([array,array,array]) 

anwenden Masken auf den Koordinaten Arrays:

mask1 = np.ma.masked_array(big_array, mask = (big_array>2)) 
mask2 = np.ma.masked_array(big_array, mask = (big_array>3)) 

Iterierte über die Koordinatenfelder für die maskierte vs. demaskiert Vergleich:

for i in range(5): 
    for j in range(5): 
      array_group = np.array([ big_array[0,i,j], big_array[1,i,j] ]) 
      array_group2 = np.array([ mask1[0,i,j], mask2[1,i,j] ]) 
      print array_group 

^^ kein NaNs von array_group aber .. ^^^

 print array_group2 

NaNs erscheinen für die maskierte array_group2 er re

Antwort

0

In Ihren Daten Ihre mask1 Ausgänge:

[[[0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --]] 

[[0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --]] 

[[0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --] 
    [0 1 2 -- --]]] 

Die kleinen Striche sind die maskierten Daten, die die nan Werte erscheinen lassen. Wie das zu beheben ... Ich glaube, es hängt davon ab, wie Sie diese Daten behandeln möchten: Ersetzen Sie diese Striche durch 0, False, löschen Sie sie ... was auch immer.

+0

Ja die Bindestriche sind die Maske, in der die Nans erscheinen, aber warum kann die Maske die np.array Iteration behandeln? Ich kann nicht durch Nullen oder ganze Zahlen ersetzen, da diese Daten durchgehend als 0,0 Koordinate interpretiert werden. Ich kann die Einträge nicht löschen, da die Array-Form zwischen den Gittern gleich sein muss. Ich hatte gehofft, die Maske würde sich einfach durch eine einfache Iteration erhalten. –

+0

Wie ich sagte: Was Sie tun wollen, wenn Sie einen maskierten Wert vorfinden, liegt ganz bei Ihnen. Du hast nichts darüber gesagt, und/oder wie du dahin gekommen bist. – IMCoins

Verwandte Themen