0

こんにちは、列番号 1051 と 1552 を除いて、if ループを使用して単純な for ループを記述して、配列の列単位の平均のみを計算しようとしています (したがって、平均として 1 つの行配列だけになります)。 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 は、すべて 1 つのステートメントで配列を操作するベクトル化された操作では非常に効率的ですが、配列の要素をループする場合は遅くなります。ここでは、列をループしていますが、これはそれほど悪くはありませんが、より 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 に答える