0

嗨,我正在尝试使用 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 很陌生

4

1 回答 1

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])
于 2018-12-10T17:04:10.373 回答