Среднее значение массива, исключая определенные столбцы IDL - PullRequest
0 голосов
/ 10 декабря 2018

Привет, я пытаюсь написать простой цикл for с циклом if, чтобы вычислить только среднее значение столбца массива (так что я получаю только один массив строк в качестве среднего значения), за исключением столбцов с номерами 1051 и 1552. Здесьвходной массив имеет 2151 столбцов и 12 строк.Результат в среднем массиве должен быть 2149 столбцов и 12 строк.Вот код, который я написал

function specmeanex, a
  m=make_array(2151,1)
  for i=0,2150,1 do begin
    if (i ne 1051) or (i ne 1552) then begin
      m[i,0]=mean(a[i,*])
    endif
  endfor
  plot,m
  return,m
end

Как я могу присвоить пустые места 0, используя else?Может кто-нибудь, пожалуйста, помогите мне здесь, так как я совсем новичок в IDL

1 Ответ

0 голосов
/ 10 декабря 2018

Вы можете просто добавить предложение else, например, так:

if (i ne 1051) or (i ne 1552) then begin
  m[i,0]=mean(a[i,*])
endif else m[i,0] = 0.0

Но я рекомендую немного изменить код, чтобы удалить цикл for.IDL может быть очень эффективным в векторизованных операциях, которые работают с массивами в одном выражении, но медленнее при циклическом перемещении по элементам массива.Здесь вы перебираете столбцы, что не так уж и плохо, но можно сделать более похожим на IDL.

Попробуйте этот код:

function mg_column_mean_exclude, a, exclude_columns
  compile_opt strictarr

  m = mean(a, dimension=2)
  m[exclude_columns] = 0.0

  return, m
end

Затем вы можете вызвать его аналогичноВаша предыдущая подпрограмма, за исключением того, что вы также передали бы исключенные столбцы:

m = mg_column_mean(a, [1051, 1552])
...