newX
和breaks
分别是(24000L,)和(7L,)形状的数字。newX在(0,9)范围内。yvals
是一个基于分段为10000个(nsegs)样本的分段的查找表,称为xvals
(此处不使用)。
deltaX=(breaks[-1]-breaks[0])/nsegs
xvals=[x+i*deltaX for i in range(nsegs+1)]
break和yvals都是单调递增的。基本上,我希望当newX值小于breaks[0]时返回yvals[0],当newX值大于breaks[-1]时返回yvals[-1]。对于其他值,我希望它生成与最接近xval的点对应的yvals索引(示例如下所示) 当我执行以下操作时:
condlist=[newX<=breaks[0] , newX < breaks[-1] , newX >= breaks[-1]]
choicelist=[yvals[0] , yvals[((newX-breaks[0]))/deltax.astype(int).item()] , yvals[-1]]
ans = np.select(condlist,choicelist)
我知道唱诗班的台词有错误-
ValueError: can only convert an array of size 1 to a Python scalar
我该怎么解决?
不需要numpy。选择此处,您的目标可以简单地声明
其中,ix是要计算的索引数组。我看到的是newX被线性转换,四舍五入为整数,然后剪裁,这样索引就不会超出0…len(yVals)-1的范围。所有这些都是由
其中
np.around((newX-breaks[0])/deltax)
将计算结果舍入到最接近的整数。如果没有舍入,astype(int)将使其成为最底层,这是不可取的。np.clip(..., 0, len(yVals)-1)
剪辑结果,以便所有索引都有效。相关问题 更多 >
编程相关推荐