10

ほとんどが良いフロートの 1 次元配列 A がありますが、いくつかの値が欠落しています。欠落しているデータは nan (数値ではない) に置き換えられます。配列内の欠損値を、近くの適切な値からの線形補間によって置き換える必要があります。たとえば、次のようになります。

F7(np.array([10.,20.,nan,40.,50.,nan,30.])) 

戻るべき

np.array([10.,20.,30.,40.,50.,40.,30.]). 

Pythonを使用してこれを行う最善の方法は何ですか?

どんな助けでも大歓迎です

ありがとう

4

3 に答える 3

14

使用できますscipy.interpolate.interp1d

>>> from scipy.interpolate import interp1d
>>> import numpy as np
>>> x = np.array([10., 20., np.nan, 40., 50., np.nan, 30.])
>>> not_nan = np.logical_not(np.isnan(x))
>>> indices = np.arange(len(x))
>>> interp = interp1d(indices[not_nan], x[not_nan])
>>> interp(indices)
array([ 10.,  20.,  30.,  40.,  50.,  40.,  30.])

編集:どのように機能するかを理解するのにしばらく時間がかかりましたnp.interpが、それも仕事をすることができます:

>>> np.interp(indices, indices[not_nan], x[not_nan])
array([ 10.,  20.,  30.,  40.,  50.,  40.,  30.])
于 2012-10-31T20:34:01.800 に答える
8

私は一緒に行きpandasます。ワンライナーによる最小限のアプローチ:

from pandas import *
a=np.array([10.,20.,nan,40.,50.,nan,30.])
Series(a).interpolate()   

Out[219]:
0    10
1    20
2    30
3    40
4    50
5    40
6    30

または、配列として保持したい場合:

Series(a).interpolate().values

Out[221]:
array([ 10.,  20.,  30.,  40.,  50.,  40.,  30.])
于 2012-10-31T20:39:56.347 に答える
0

データを補間するたびに新しい Series オブジェクトまたは Series の新しいアイテムを作成しないようにするには、RedBlackPyを使用します。以下のコード例を参照してください。

import redblackpy as rb

# we do not include missing data
index = [0,1,3,4,6]
data = [10,20,40,50,30]
# create Series object
series = rb.Series(index=index, values=data, dtype='float32',
                   interpolate='linear')

# Now you have access at any key using linear interpolation
# Interpolation does not creates new items in Series
print(series[2]) # prints 30
print(series[5]) # prints 40
# print Series and see that keys 2 and 5 do not exist in series
print(series)

最後の出力は次のとおりです。

Series object Untitled
0: 10.0
1: 20.0
3: 40.0
4: 50.0
6: 30.0
于 2018-08-24T20:22:15.533 に答える