【发布时间】:2015-02-26 06:31:54
【问题描述】:
有没有办法将掩码的 3D numpy 数组转换为用 NaN 代替掩码的 numpy 数组?这样我就可以使用np.save 轻松地写出 numpy 数组。另一种方法是找到一种方法来写出被屏蔽的数组,并为被屏蔽的元素提供一些明确的指示符。我试过了:
a = np.ma.zeros((500, 500))
a.dump('test')
但我需要将文件采用某种格式,以便可以将其读入 R。谢谢。
【问题讨论】:
有没有办法将掩码的 3D numpy 数组转换为用 NaN 代替掩码的 numpy 数组?这样我就可以使用np.save 轻松地写出 numpy 数组。另一种方法是找到一种方法来写出被屏蔽的数组,并为被屏蔽的元素提供一些明确的指示符。我试过了:
a = np.ma.zeros((500, 500))
a.dump('test')
但我需要将文件采用某种格式,以便可以将其读入 R。谢谢。
【问题讨论】:
对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
method。 marr.filled(np.nan) 等价于np.ma.filled(marr, np.nan)。
【讨论】:
您可以将掩码乘以数据,以便所有被掩码的元素都为零,例如:
a=np.random.rand(500,500)
b=ma.masked_greater(a, .5)
result=b.data*b.mask
然后可以使用
将其转换为 nanresult[result==0] = np.nan
【讨论】: