困った点
import numpy as np data = np.array([1.23, 4.56, 7.89], dtype=np.float32) no_value = np.float32(-9999) factor = 100 data = np.ma.masked_equal(data, no_value) # 1. Using data[~data.mask] result1 = data[~data.mask] * factor print(result1) # [[123.00000191 455.99999428 788.99998665]] print(type(result1)) # <class 'numpy.ma.MaskedArray'> print(result1.dtype) # float64 # 2. Using data.data[~data.mask] result2 = data.data[~data.mask] * factor print(result2) # [[123. 456. 789.]] print(type(result2)) # <class 'numpy.ndarray'> print(result2.dtype) # float32
一見同じようなアウトプットになりそうですが、微妙に結果が変わります。
原因は、numpy.ma.MaskedArray
とnumpy.ndarray
にありそうです。
解決策
factor
の取り扱いが問題だったようです。
factor = np.float32(100)
に変更してみましょう。
import numpy as np data = np.array([1.23, 4.56, 7.89], dtype=np.float32) no_value = np.float32(-9999) factor = np.float32(100) data = np.ma.masked_equal(data, no_value) # 1. Using data[~data.mask] result1 = data[~data.mask] * factor print(result1, type(result1), result1.dtype) # [[123. 456. 789.]] <class 'numpy.ma.MaskedArray'> float32 # 2. Using data.data[~data.mask] result2 = data.data[~data.mask] * factor print(result2, type(result2), result2.dtype) # [[123. 456. 789.]] <class 'numpy.ndarray'> float32
これで一致しました。どうやら、int
,float
の違いが問題だったようです。
同じ問題にあたったら方のヒントになればうれしいです