我正在嘗試線性插入Array[Option[Long]]
。例如,給定:在Scala中插入數組
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
)中的元素之間沒有任何關係。但是這些值是單調遞增的。
對於那些熟悉Python我正在尋找斯卡拉相當於如下:
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您應該在您的問題中添加所需的確切要求。 –