newXbreaks分别是形状为(24000L)和(7L)的numpy ndarray。 newX在(0,9)范围内。 yvals是一个基于中断的查找表,该中断被细分为10000个(nsegs)样本,称为xvals(此处未使用)。

deltaX=(breaks[-1]-breaks[0])/nsegs
xvals=[x+i*deltaX for i in range(nsegs+1)]


中断和yval都单调增加。基本上,我希望当newX值小于breaks [0]时返回yvals [0],而当newX值大于breaks [-1]时返回yvals [-1]。对于其他值,我希望它为与最接近xval的点相对应的yval生成索引(下面显示了一个示例)
当我执行以下操作时:

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:只能将大小为1的数组转换为Python标量


我怎样才能解决这个问题?

最佳答案

无需numpy.select在这里,您的目标可以简单地说明

choicelist = yVals[ix]


其中ix是要计算的索引数组。我看到的是newX进行线性变换,四舍五入为整数并进行裁剪,以使索引不会超出0 ... len(yVals)-1范围。这一切都由

ix = np.clip(np.around((newX-breaks[0])/deltax).astype(int), 0, len(yVals)-1)


哪里


np.around((newX-breaks[0])/deltax)将计算结果四舍五入到最接近的整数。如果没有舍入,.astype(int)会将其取整,这是不太理想的。
np.clip(..., 0, len(yVals)-1)剪切结果,以便所有索引均有效。

关于python - ValueError:只能将大小为1的数组转换为Numpy Select的Python标量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41732296/

10-09 17:18