我正在尝试使用numpy.where()来查找元素的索引,但它返回一个空数组。
import numpy as np
grid= np.mgrid[-2:2:5*1j, -2:2:11*1j]
X , Y = grid[0], grid[1]
complex_grid = X+1j*Y
xid, yid= np.where(complex_grid == -1.0 - 0.8j)
print(xid, yid)
它应返回index(1,3),但它返回一个空数组及其数据类型。 我做错了什么?
编辑: - 我的主要目的是从网格中找到与给定坐标(x,y)对应的索引。我做了一个复杂的网格,因为我可以融合我从mgrid获得的两个2D矩阵。
答案 0 :(得分:1)
浮点值很少是精确的,因此直接比较它们通常被认为是个坏主意。
但是,您可以使用abs(difference) < epsilon
之类的内容来检查某个值的给定接近程度,例如:
>>> xid, yid= np.where(np.abs(complex_grid -(-1.0 - 0.8j)) < 1e-10)
>>> print(xid, yid)
[1] [3]
甚至更好:使用已经执行此操作的numpy.isclose
但允许相对和绝对容差以及nan
处理(如果您需要这些):
>>> xid, yid= np.where(np.isclose(complex_grid, -1 - 0.8j)))
>>> print(xid, yid)
[1] [3]
答案 1 :(得分:0)
isclose()
是一个更好的选择,因为将浮点数比作等于总是有点冒险:
xid, yid = np.where(np.isclose(complex_grid, np.ones(complex_grid.shape) * (-1.0 - 0.8j)))