【问题标题】:Python masked arrays producing NaNs with np.array使用 np.array 生成 NaN 的 Python 掩码数组
【发布时间】:2017-12-25 15:55:27
【问题描述】:

我正在尝试选择一个较大网格的子集来执行有限元分析以在两个数组之间进行迭代;一个掩码数组和一个未掩码数组,但我遇到了使用 np.arrays 时从掩码中出现 NaN 的问题。我最初在这里使用掩码来尝试避免 NaN 问题,包括 NaN == NaN (False) 等...但是当与 np.arrays 一起使用时,掩码本身似乎正在创建 NaN!

要迭代的坐标数组:

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

在坐标数组上应用掩码:

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

遍历坐标数组以进行屏蔽与未屏蔽比较:

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  

^^没有来自 array_group 的 NaN,但是.. ^^^

        print array_group2  

此处显示掩码 array_group2 的 NaN

【问题讨论】:

    标签: python nan masked-array


    【解决方案1】:

    在您的数据中,您的 mask1 输出:

    [[[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 -- --]]]
    

    小破折号是导致nan 值出现的屏蔽数据。 至于如何解决这个问题...我相信这取决于您要如何处理这些数据:将这些破折号替换为 0、False、删除它们...随便。

    【讨论】:

    • 是的,破折号是出现 nans 的掩码,但为什么掩码不能处理 np.array 迭代?我不能用零或整数替换,因为该数据将被解释为自始至终的 0,0 坐标。我无法删除条目,因为网格之间的数组形状需要相同。我希望面具能简单地通过基本迭代来维持自己
    • 正如我所说:如果遇到掩码值,您想做什么取决于您。你没有说什么,和/或如何到达那里。
    猜你喜欢
    • 2015-11-09
    • 2015-11-03
    • 2021-03-09
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2015-01-20
    • 2022-06-10
    相关资源
    最近更新 更多