使用NaNs将.numpy蒙片数组保存到.numpy数组,其中mask == True

时间:2015-02-25 22:06:51

标签: python numpy

有没有办法将屏蔽的3D numpy数组转换为NNDy数组,用NaN代替掩码?这样我就可以使用np.save轻松编写numpy数组。另一种方法是找到一种方法来写出带掩码的数组,并为掩盖的元素提供一些清晰的指示。我试过了:

a = np.ma.zeros((500, 500))
a.dump('test')

但我需要文件格式,以便可以读入R.谢谢。

2 个答案:

答案 0 :(得分:2)

the masked array operations page的扫描显示np.ma.filled可以满足您的需求。例如,

import numpy as np

arr = np.arange(2*3*4).reshape(2,3,4).astype(float)
mask = arr % 5 == 0

marr = np.ma.array(arr, mask=mask)
print(np.ma.filled(marr, np.nan))

产量

[[[ nan   1.   2.   3.]
  [  4.  nan   6.   7.]
  [  8.   9.  nan  11.]]

 [[ 12.  13.  14.  nan]
  [ 16.  17.  18.  19.]
  [ nan  21.  22.  23.]]]

或者,您可以使用蒙面数组filled methodmarr.filled(np.nan)相当于np.ma.filled(marr, np.nan)

答案 1 :(得分:1)

您可以将掩码乘以数据,以便所有蒙版元素都等于零,例如:

a=np.random.rand(500,500)
b=ma.masked_greater(a, .5)
result=b.data*b.mask

然后可以使用

将其转换为nan
result[result==0] = np.nan