简单地说......这就是问题:
import numpy as np
a = np.array([ 0, 1, 2, 3, 4, 5, 6, 100, 8, 9])
np.where(a==100, -1, a[a])
我期望获得的是:0, 1, 2, 3, 4, 5, 6, -1, 8, 9
相反,我得到:index 100 out of bounds 0<=index<10
我承认索引无效,但是不应该eval a [100]而是-1而不是......据我所知numpy.where()命令结构。
在这个例子中我做错了什么?
只是为了澄清我在这里尝试做的更详细的代码: 它是一个查找表数组重映射程序:
import numpy as np
# gamma-ed look-up table array
lut = np.power(np.linspace(0, 1, 32), 1/2.44)*255.0
def gamma(x):
ln = (len(lut)-1)
idx = np.uint8(x*ln)
frac = x*ln - idx
return np.where( frac == 0.0,
lut[idx],
lut[idx]+(lut[idx+1]-lut[idx])*frac)
# some linear values array to remap
lin = np.linspace(0, 1, 64)
# final look-up remap
gamma_lin = gamma(lin)
答案 0 :(得分:2)
作为函数参数放置的表达式在传递给函数(Documentation link)之前会被计算。因此,即使在调用a[a]
之前,您也会从表达式np.where
中获得索引错误。
答案 1 :(得分:1)
使用以下内容:
np.where(a==100, -1, a)
正如documentation所说:
numpy.where(condition[, x, y])
Return elements, either from x or y, depending on condition.
If only condition is given, return condition.nonzero().
此处,a==100
是您的条件,-1
符合条件时应采取的值(True
),a
值可以依赖。
你得到IndexError的原因是你的a[a]
:你自己索引数组a
,这相当于a[[0,1,2,3,4,5,6,100,8,9]]
:因为{{}而失败1}}少于100个元素...
另一种方法是:
a
(如果您想要更改a_copy = a.copy()
a_copy[a==100] = -1
,请a_copy
替换
答案 2 :(得分:0)
当您编写a[a]
时,您尝试从a
获取索引0,1,2 ... 100 ...这就是为什么您获得索引超出范围的错误。你应该写np.where(a==100, -1, a)
- 我认为这会产生你想要的结果。