排除某些列IDL的数组的均值

时间:2018-12-10 11:16:44

标签: arrays idl-programming-language spectral

嗨,我正在尝试使用if循环编写简单的for循环,以仅计算按列排列的数组的均值(因此,我最终只得到一个行数组作为均值),除了列号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

如何使用else将空白分配给0?任何人都可以在这里帮助我,因为我是IDL的新手

1 个答案:

答案 0 :(得分:0)

您可以只添加一个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])