Xlwings のいくつかの機能を試してみました。すばやく補間できる numpy の一般的な関数 (numpy.interp) を使用したいと思います。
@xlfunc
def interp(x, xp,yp):
"""Interpolate vector x on vector (xp,yp)"""
y=np.interp(x,xp,yp)
return y
@xlfunc
def random():
"""Returns a random number between 0 and 1"""
x=np.random.randn()
return x
たとえば、このように 2 つのベクトル (xp、yp) を作成します (Excel で) 800 行
First Column Second Column
0 =random()
1 =random()
2 =random()
3 =random()
4 =random()
5 =random()
[...]
3 番目の列では、0 から 800 までの乱数 (昇順でランク付け) を使用して、別のベクトル (60 行) を作成します。これにより、次のような結果が得られます。
Third Column
17.2
52.6
75.8
[...]
3 列目を 1 列目に補間したいと思います。そう
Fourth Column
=interp(C1,A1:A800,B1:B800)
=interp(C2,A1:A800,B1:B800)
=interp(C3,A1:A800,B1:B800)
[...]
これを行うのは簡単です。しかし、補間する列が 10 個以上ある場合、時間がかかりすぎる可能性があります。これを行うためのより良い方法があると確信しています。アイデア ?
ご協力いただきありがとうございます !
編集 :
これを試しましたが、「xw.Range[...].value=y」で機能しません
@xw.xlfunc
def interpbis(x, xp,yp):
"""Interpolate scalar x on vector (xp,yp)"""
thisWB=xw.Workbook.active()
thisSlctn=thisWB.get_selection(asarray=True)
sheet=thisSlctn.xl_sheet.name
r = thisSlctn.row
c = thisSlctn.column
y=np.interp(x,xp,yp)
xw.Range(sheet,(r,c)).value=y
return None