理系夫婦のうたたねブログ

理系夫婦が好きなことを書いていきます。たまに医学っぽいことを書いていますが、あくまで私見です。

Igor pro -Make operation-

だんなです。

 

在宅勤務*1なので最近はデータ解析が主になっているのですが、以前に書いた通りIgorというソフトウェアを使って解析を行っています。

 

Pythonしか使ったことのない私にはIgorの関数を作成したりするのは非常に困難で、日々苦しんでいます。基本的には組み込み関数をつなげて関数を作っていくので、それを気が向いたときに開設しようと思います。

初回は最も使うであろうMake operationです。

 

 

 

  • 概要

wave (Igorにおけるデータはすべてwaveと呼ばれます) を作成するためのOperationです。縦に1が10個並ぶwave1を作成するには

make/N=10 wave1 = 1

などと書きます。makeの後にくっついている/NのことをFlagとよびます。Igorにおけるデータは基本的にwaveを作ってそこで計算を行うので、makeは非常に頻度高く使うoperationです。

 

  • 書式

書式は先ほど見た通り

Make [flags] waveName [=n0, n1, n2....]

です。(Igorでは大文字小文字は基本的に無視されるのでmakeでもMakeでも挙動は同じです。ただし同じ関数内で大文字小文字を混ぜるのはよくないとは思います。*2

 

  • Flags

たくさんあるので個人的によく使うものを書いていきます。

  • /N, /n = n 
  • /N, /n = (n1, n2, n3, n4)

wave作成時のデータ点を表します。例えば

make/N =10 であれば1次元でデータ点10個のwave

make/N = (10,10)であれば2次元でデータ点10個×10個のwave

のようになります。注意点としてはデータ点の数を変数で指定する場合にはかっこで囲む必要があります。

つまり

make/N = wavenum はエラーになります。

make/N = (wavenum)というふうに書く必要があります。

 

  • /O, /o

これは上書きのflagです。

make/N =10 wave1 =1

make/N = 10 wave1 = 5

と同じ名前のwaveを作成しようとするとエラーが出ます。この時

make/N =10 wave1 =1

make/O/N = 10 wave1 = 5

とするとwave1が上書きされてエラーが起きません。

 

  • /C, /c

複素数を要素に持つwaveの作成です。

make/C/N = 10 wave1 = 1

複素数表示での10を要素に持つwaveを作れます。

要素を10+3iなどにしたければ

make/O/C/N = 10 wave1 = cmplx(10,3)

と記載する必要があります。ちなみにこの状態でwave1の要素を表示すると

print wave1[0] 

(10,3)

と表示されます。(今知りました)

 

  • /FREE

FREE waveを作成します。Igorではwaveは特別扱いされており、一つの関数で使ったwaveはグローバル変数扱いとなるため、ほかの関数でも呼び出すことが可能です。(この辺の言葉遣いがあっているのか不安)

一方で一瞬しか使わないwaveを作成する際に役立つのがFREE flagです。

FREE flagをつけて作成したwaveは、functionを実行後に消去されます。関数外から呼び出すことはできません。

試したことはありませんが、FREE waveをうまく使うことで処理の軽量化もできるのではないかと思っています。

 

  • 実際に使用する際の注意

よく使うOperationなので、特に注意点はありませんが、/Oのつけ忘れやFREEをつけていないことでうまく関数が動かないことはよくあるように思います。データ型とFlagに気を付けて使う必要があると思っています。

 

 

 

 

とこんな感じでしょうか。足りない項目が多いと思いますが、自分が気になったら書き足していきます。

 

しかしIgorはデバッグが大変だ・・・Pythonにおけるエディタ*3の偉大さに気づかされている気がします。

 

 

 

*1:現在大学院生なので勤務ではないか

*2:これ書いていてPEP8のようなコーディング規約はないのだろうか、とふとおもいました。

*3:私はSpyderを使っています