numpy.where()函数仅用于完全匹配?

时间:2015-03-31 16:42:51

标签: python arrays numpy match

只是一种我似乎无法想象的好奇心,它一定是简单的!任何想法都会非常有用!

两个数组,y中只有一个值匹配x中的任何值。我的代码将迭代x中的每个值,并在y中找到匹配的值并计算到每个值的距离。在z [i,j]

中输入找到匹配值所需的最小距离

直到我将1更改为1.1并尝试允许其寻找值的某些变化。如果" 1"在y可以在0.9 -1.0之间变化我怎么能解释它?

x = [[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1]]
y = [[2,2,2,2,2],[2,2,2,2,2],[2,2,1,2,2],[2,2,2,2,2],[2,2,2,2,2]]

xx = numpy.array(x)
yy = numpy.array(y)

zz = numpy.ones((5,5))

for i in range(0,5):
    for j in range(0,5):
        match = numpy.where((xx[i,j] == yy))

        distance = sqrt((i-(np.array(match[0])))**2 + (j -(np.array(match[1])))**2)
        zz[i,j] = min(distance)

我尝试过各种变体:

match = numpy.where((yy-0.1 <= xx[i,j] <= yy+0.1))

&#34;错误:ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()&#34;

2 个答案:

答案 0 :(得分:2)

当它只是避免错误时,请尝试

numpy.where((yy-0.1 <= xx[i,j]) & (xx[i,j] <= yy+0.1))

答案 1 :(得分:0)

关于错误,会更详细地解释here(以及其他地方)。

或者,您可以简单地使用np.isclose。像:

numpy.where(numpy.isclose(xx[i,j],yy, atol=0.1))