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

numpy.where() function for exact matches only?

只是好奇,我似乎无法弄清楚,它一定很简单!任何想法都会很有帮助!

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

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

它一直有效,直到我将 1 更改为 1.1,并且我尝试允许其寻找的值发生一些变化。如果 y 中的“1”可以在 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))

"Error:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"

当只是为了避免错误时,尝试

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

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

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

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