我正在处理名为LON
的经度数组,但我遇到了numpy.where()
函数的一些问题。
>>> print LON[777,777]
13.4635573678
>>> print np.where(LON == 13.4635573678)[0]
[]
>>> print np.where(LON == 13.4635573678)[1]
[]
它找不到数组等于当前存在的值的LON
条目。问题与我正在处理双变量的事实有关吗?因为直到现在np.where()
总是对整数,浮点数和字符串都很好......
答案 0 :(得分:3)
解决此问题的一种方法可能是使用> BX = sapply(vlr, function (x) 1.5+0.9*min(20,x))
> BX
[1] 17.70 17.79 17.88 17.97 18.06 18.15 18.24 18.33 18.42 18.51 18.60 18.69 18.78 18.87 18.96
[16] 19.05 19.14 19.23 19.32 19.41 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
[31] 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
[46] 19.50 19.50 19.50 19.50 19.50 19.50 19.50 19.50
与大致匹配:
np.where
当然,如果epsilon(本例中为0.1)太大,这可能会给你多个匹配,但如果数组中有多个条目,则使用完全匹配时可能会出现相同情况具有相同的坐标。
修改:正如in comments指出的那样,您也可以使用np.isclose
,即使在Python >>> X = np.linspace(1, 10, 100).reshape((10,10))
>>> np.where(abs(X - 6.3) < 0.1)
(array([5, 5]), array([8, 9]))
>>> X[np.where(abs(X - 6.3) < 0.1)]
array([ 6.27272727, 6.36363636])
不可用的情况下也是如此。但请注意,math.isclose
不会提供坐标数组,而是np.isclose
/ True
数组。如果您需要坐标,则可以再次将False
的结果通过np.close
。
np.where
或者,您可以考虑更改从>>> np.where(np.isclose(X, 6.3636))
(array([5]), array([9]))
>>> X[np.isclose(X, 6.3636)]
array([ 6.36363636])
数组中为您提供坐标的函数,以返回数组中该值的位置。这样,您根本不需要使用LON
。