Array[Option[Long]]
を直線補間しようとしています。与えられた例:スカラで配列を補間する
val example1 = Array(Some(20l), None, Some(60l))
val example2 = Array(Some(20l), None, None, Some(80l))
val example3 = Array(Some(20l), None, None, Some(80l), Some(90l), Some(100l))
val example4 = Array(Some(20l), None, None, Some(80l), None, Some(82l))
を私は期待してい:
val example1Interpolated = Array(20l, 40l, 60l)
val example2Interpolated = Array(20l, 40l, 60l, 80l)
val example3Interpolated = Array(20l, 40l, 60l, 80l, 90l, 100l)
val example4Interpolated = Array(20l, 40l, 60l, 80l, 81l, 82l)
コレクション(例えばexample4
)内の要素の間には関係がありません。しかし値は単調に増加しています。
def interpolate(input_):
nans = np.isnan(input_)
get_index = lambda z: z.nonzero()[0]
input_[nans] = np.interp(get_index(nans), get_index(~nans), input_[~nans])
return input_
のために:
interpolate(np.array([20, np.nan, 60]))
interpolate(np.array([20, np.nan, np.nan, 80]))
interpolate(np.array([20, np.nan, np.nan, 80, np.nan, 82]))
利回り:
array([ 20., 40., 60.])
array([ 20., 40., 60., 80.])
array([ 20., 40., 60., 80., 81., 82.])
これまでに何を試しましたか?あなたはどこでブロックされていますか?あなたの具体的な問題は何ですか? – sjrd
@sjrdは、任意の値を持つコレクションがあれば、これを行うための機能的な方法を理想的に探しています。誰かが知っている実装や、私が紛失していることがあるパッケージがあるかどうかを知りましょう。 –
@AmirZiai質問に必要な正確な要件を追加する必要があります。 –