次のコードがあります(つまり、問題を示すためのダミーコードです)
#!/usr/bin/python
import numpy as np
#define array, -999 being a missing value
a=np.array([5.,-999.,7.,8.])
print "array:"
print a
print
a=np.ma.masked_values(a,-999.)
print "masked array:"
print a
print
#define new missing value
bad=1e30
a.set_fill_value(bad)
#roll array
a=np.roll(a,1,axis=0)
#plug-in new missing value
a=a.filled()
print "array after rolling with new missing value (1e30):"
print a
numpy 1.4.1 を搭載した 32 ビット マシンでは、期待どおりの出力が得られます。
array:
[ 5. -999. 7. 8.]
masked array:
[5.0 -- 7.0 8.0]
array after rolling with new missing value (1e30):
[ 8.00000000e+00 5.00000000e+00 1.00000000e+30 7.00000000e+00]
numpy 1.6.1 を搭載した 64 ビット マシンでは、
[ 5. -999. 7. 8.]
masked array:
[5.0 -- 7.0 8.0]
array after rolling with new missing value (1e30):
[ 8.00000000e+00 5.00000000e+00 1.00000000e+20 7.00000000e+00]
そのため、1e30 のマスクされた配列のフィル値は、配列をローリングした後に 1e20 に変更されました。何か間違ったことをしているのですか、それとも既知のバグですか?
ラファエル