簡體   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