Python 使用 np.array 生成 NaN 的掩码数组
Python masked arrays producing NaNs with np.array
我正在尝试 select 一个较大网格的子集来执行有限元分析以在两个数组之间迭代;一个掩码数组和一个未掩码数组,但我遇到了使用 np.arrays 时从掩码中出现 NaN 的问题。我最初在这里使用掩码来尝试 避免 NaN 问题,包括 NaN == NaN (False) 等...但是当与 np.arrays 一起使用时,掩码本身似乎正在创建 NaN !
coordinate arrays to iterate over:
array = np.array(list(np.arange(5))*5).reshape(5,5)
big_array = np.array([array,array,array])
apply masks on the coordinate arrays:
mask1 = np.ma.masked_array(big_array, mask = (big_array>2))
mask2 = np.ma.masked_array(big_array, mask = (big_array>3))
iterate over the coordinate arrays for the masked vs. unmasked comparison:
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
^^no NaNs from array_group but.. ^^^
print array_group2
NaNs appear for the masked array_group2 here
在您的数据中,您的 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,删除它们......随便什么。
我正在尝试 select 一个较大网格的子集来执行有限元分析以在两个数组之间迭代;一个掩码数组和一个未掩码数组,但我遇到了使用 np.arrays 时从掩码中出现 NaN 的问题。我最初在这里使用掩码来尝试 避免 NaN 问题,包括 NaN == NaN (False) 等...但是当与 np.arrays 一起使用时,掩码本身似乎正在创建 NaN !
coordinate arrays to iterate over:
array = np.array(list(np.arange(5))*5).reshape(5,5)
big_array = np.array([array,array,array])
apply masks on the coordinate arrays:
mask1 = np.ma.masked_array(big_array, mask = (big_array>2))
mask2 = np.ma.masked_array(big_array, mask = (big_array>3))
iterate over the coordinate arrays for the masked vs. unmasked comparison:
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
^^no NaNs from array_group but.. ^^^
print array_group2
NaNs appear for the masked array_group2 here
在您的数据中,您的 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,删除它们......随便什么。