在数组中查找值的索引-IDL

问题描述

我正在通过一些继承的代码来学习IDL。在其他语言(python,MATLAB)中,很容易在数组中找到与目标值相关的索引。但是,我似乎无法在IDL中找到任何简单的函数方法来执行此操作。例如:

A = [55,6,762,35,155,1,867,35]

我知道值155在A中,但是我对它的位置[x,y]感兴趣。如何轻松访问此信息?

我唯一能想到的就是在数组中找到一个MAX值。

B = max(A,location)

其中第二个参数(位置)给出A中最大值的索引。但是,我希望能够使用任何值,而不仅仅是最大值。

我知道VALUE_LOCATE函数,但是这要求数组必须是单调的,这里不是这种情况。

除了其他方面,我尝试使用WHERE和ARRAY_INDICES,但我认为我没有正确使用它们(或者它们只是没有按照我的要求做)。

谢谢。

解决方法

当然,我在发布此内容后立即想到了这一点。使用WHERE函数解决了该问题。如果将来有人在搜索此内容:

C = where(A eq desired_value)
,

您可以跟踪原始数组中的索引,然后按以下方式使用VALUE_LOCATE

b = LINDGEN(N_ELEMENTS(a))
s = SORT(a)
c = b[s]
d = a[s]

现在只需将搜索值定义为变量v,即可执行以下操作:

v = 155
i = VALUE_LOCATE(d,v)     ;;  index of sorted array
j = c[i[0]]               ;;  index of original,unsorted array

然后您可以通过以下方法检查结果:

PRINT,';;  ',a[j[0]],d[i[0]]
;;       155     155

VALUE_LOCATE唯一令人讨厌的警告是,如果数组a中包含任何NaN,则搜索将失败或返回错误值,因此请当心。

如果您知道要搜索的值是整数,则也可以使用WHERE,例如:

good = WHERE(a EQ v[0],gd)
PRINT,a[good[0]]
;;       155

使用WHERE的警告是,如果您仅知道近似搜索值,并且数组包含单精度或双精度浮点值。有时,由于您没有完全匹配的内容,因此搜索结果将变为空。