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))
只是好奇,我似乎无法弄清楚,它一定很简单!任何想法都会很有帮助!
两个数组,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))