如何解决在数组中查找值的索引-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
的警告是,如果您仅知道近似搜索值,并且数组包含单精度或双精度浮点值。有时,由于您没有完全匹配的内容,因此搜索结果将变为空。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。