我尝试尝试 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
例如,我创建两个向量 (xp, yp) 像这样(在 Excel 中)800 行
First Column Second Column
0 =random()
1 =random()
2 =random()
3 =random()
4 =random()
5 =random()
[...]
在第三列中,我创建了另一个向量(60 行),随机数介于 0 和 800 之间(按升序排列),这给了我这样的信息:
Third Column
17.2
52.6
75.8
[...]
我想将第三列插入第一列。所以
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