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

时间:2017-01-19 01:30:44

标签: python arrays numpy

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

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

休息和y are都是单调递增的。基本上,我希望当newX值小于break [0]时返回yvals [0],当newX值高于break [-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:只能将大小为1的数组转换为Python标量

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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