IDL Проверить, если число в массиве

Я очень новичок в IDL.

По сути, я хочу иметь оператор if, который проверяет, находится ли текущий индекс I в массиве.

В Python это будет выглядеть примерно так:

if this_num in xartifact:
   print 'Is an x artifact'
elif this_num in yartifact:
   print 'Is a y artifact'
else:
   print 'Is neither'

Я знаю, что вы можете вкладывать ifs в IDL:

IF P1 THEN S1 ELSE $

IF P2 THEN S2 ELSE $

IF PN THEN SN ELSE SX

Я просто не могу узнать, есть ли оператор in или нормальный способ сделать это.

ура

2 ответа

Решение

Я бы использовал count параметр в WHERE аналогично приведенному выше примеру:

a = 2
b = [1, 2, 3, 5]
ind = where(a eq b, count)
print, count gt 0 ? 'a in b' : 'a not in b'

IDL может быть немного перегружен операторами if. Как вы сказали, базовое утверждение "если тогда еще, если потом" может выглядеть примерно так:

if a eq 0 then print, 'the variable a equals 0' else $
if a eq 1 then print, 'the variable a equals 1' $
else print, 'the variable is something else'

Для нескольких строк в выражении if вместо использования $ для продолжения строки вы можете использовать что-то вроде:

if a eq 0 then begin
  print, 'the variable a equals 0'
  print, 'more stuff on this line'
endif else if a eq 1 then begin
  print, 'the variable a equals 1'
  print, 'another line'
endif else begin
  print, 'a is something else'
  print, 'yet another line'
endelse

Наконец, чтобы оценить, находится ли переменная в векторе, зависит именно то, что вы хотите сделать и что находится в вашем массиве, но один из вариантов - использовать функцию where. Один пример, чтобы показать, как это работает:

a=2
b=[1,2,2,3]
result = where(a eq b)
print, result
if result[0] ne -1 then print, 'a is in b' $
else print, 'a is not in b'

Вероятно, есть гораздо лучший способ сделать это. Возможно, заявление о ситуации.

Ответ, предоставленный @mgalloy, определенно работает, однако есть более простое решение, которое использует всю процедуру и включает только одну строку кода.

a = 2
b = [1, 2, 3, 5]

if total(b eq a) eq 1 then print, 'Yes' else print, 'No'
Другие вопросы по тегам