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'