繁体   English   中英

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

[英]ValueError: can only convert an array of size 1 to a Python scalar for Numpy Select

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)]

break 和 yvals 都是单调递增的。 基本上,我希望当 newX 值小于中断 [0] 时返回 yvals[0],当 newX 值高于中断 [-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 标量

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM