ValueError:对于Numpy,只能将大小为1的数组转换为Python标量

2024-04-19 09:59:47 发布

您现在位置:Python中文网/ 问答频道 /正文

newXbreaks分别是(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

我该怎么解决?


Tags: inforrange数字形状样本分段breaks
1条回答
网友
1楼 · 发布于 2024-04-19 09:59:47

不需要numpy。选择此处,您的目标可以简单地声明

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)剪辑结果,以便所有索引都有效。

相关问题 更多 >