* 本記事はコマンドに関する記載が多くなっています。あらかじめご了承ください。

IGOR Pro ではデータをウェーブと呼びます。ウェーブは 1次元から 4次元まで定義できますが、IGOR Pro を活用するには 1次元ウェーブと 2次元ウェーブを柔軟に使いこなすことが重要になってきます。

1次元ウェーブと 2次元ウェーブを互いに変換するには、バージョン 6.2 でデータメニューで利用できるようになった、XYZtoMatrix に代表されるような、IGOR Pro 付属のプロシージャを利用するのが便利です。でも今回は、コマンドを使って、いろんなウェーブ同士の代入計算(Wave Assignment)を実験してみました。

▼ ポイント数が等しい 1次元ウェーブと2次元ウェーブ

ポイント数が等しい 1次元のウェーブ WaveA と WaveB があるとき、IGOR Pro のコマンドラインで、

WaveA = WaveB

とすると、WaveB の各ポイントが WaveA に代入(Assign)されます。しかし、次のように ポイント数は同じですが、次元が異なる 2つのウェーブの場合、どうなるのでしょう?

Make/O/N=100 aaa=p
Make/O/N=(10,10) bbb

aaa は 100 ポイントの1次元ウェーブで、値は p で与えられています。p は適用先ウェーブの行インデックスを返しますので、0, 1, ... , 99 という値が格納されています。aaa だけをプロットするとこんな風に直線になりますね。

fig1.png

一方 bbb は、10x10 の2次元ウェーブで、ポイント数は aaa と同じ 100 ポイントです。しかし、ウェーブを作っただけで、値は何も設定されていません。空っぽです。さて、bbb に aaa を次のように代入してみます。

bbb = aaa

fig2.png

左上から右下に向けて、赤から紫へのグラデーションが描かれています。100 ポイントの 1次元ウェーブが 10ポイントずつで折り返されて、10x10 ポイントの2次元ウェーブに代入されていることが分かります。では、次の方法はどうでしょう?

bbb = aaa[p]

違いは、右辺の [p] です。p は先にもでてきましたが、適用先ウェーブ、つまり左辺の行インデックスを意味します。bbb は10行しかありませんので、bbb のすべての列について、こんな具合に aaa の1行目から10行目の値、つまり濃い赤からオレンジまでを繰り返し代入することになります。

fig3.png


▼ 代入される 2次元ウェーブの方が大きい場合

代入される 2次元ウェーブの方が 20x20 ポイントと大きいケースを考えてみましょう。

Make/O/N=(20,20) ccc
ccc = aaa

fig4.png

aaa は 100 ポイントしかありませんので、101 ポイント以降は aaa の最後の値(=紫)が以降繰り返し代入されていることが分かります。次に、[p] を使うとどうなるでしょうか?

ccc = aaa[p]

fig5.png

ccc は 20行の2次元ウェーブですので、aaa の1行目から20行目までの値(赤から黄色)が、繰り返し ccc のすべての列に代入されています。

▼ 代入される 2次元ウェーブの方が小さい場合

次に、5x5 ポイントの2次元ウェーブ ddd を考えます。25ポイントしかありませんので、100 ポイントある aaa を代入してもあふれてしまうのですが、こういう時 4ポイントごとに間引くことができたらいいですよね?

かといって、For ループを回して、インデックスが4の倍数であるかどうかを判定するプロシージャを作るのもスマートじゃありません。

実は、いい方法があるんですよ。じゃーん。

Make/O/N=(5,5) ddd
ddd = aaa[q*20+p*4]

fig6.png

p は適用先ウェーブの列インデックスですが、行インデックス q もあります。p も q も 0 から始まるインデックスですので、4ポイントごとに間引くには、1列当たり20ポイント進ませることを加味して、インデックスを q*20+p*4 としてやると、うまくいきます。赤から紫までが間引かれながら代入されています。

列、行、だけでなくその上の次元の、レイヤー、チャンクにもそれぞれ、rs というインデックスがあります。あまり利用する機会はなさそうですが、一応ご紹介だけ。


▼ 2次元ウェーブを1次元ウェーブに代入する

今度は代入する向きを変えてみましょう。今度は 1次元ウェーブ eee に、2次元ウェーブ fff を代入してみます。

Make/O/N=100 eee
Make/O/N=(10,10) fff=p+q*10
eee = fff
fig7.pngfig8.png

これまたうまくいきます。2次元ウェーブを順に展開して、1次元ウェーブが得られます。じゃぁ、これはどうなるでしょう?

eee = fff[p]

fig9.png

これもうまくいきます。2次元ウェーブを代入する場合は、うまーく展開してくれるようです。


▼ まとめ

1次元ウェーブと2次元ウェーブの代入についてあれこれやってみました。ちょっとしたウェーブの演算をコマンドでできるようになると、さらに IGOR Pro を活用できると思います。なお、IGOR Pro のマニュアルには、これとは違う例だけでなく、ウェーブに関する詳しい説明が掲載されていますので、そちらも併せてご覧ください。

DisplayHelpTopic "Waves"

--
井上@技術部でした。

※この記事の内容は執筆者の個人的見解で、ヒューリンクスによる公式情報ではありません。[免責事項]

トラックバック

この記事へのトラックバックURL
http://blog.hulinks.co.jp/cgi/mt/mt-tb.cgi/474
内容に対しての関連性がみられないものは削除する場合があります

コメント一覧

いつも有意義な情報ありがとうございます。

Graph0の描画方法につきまして教えてください。
ポイントごとに色が分かれていますが、どうすれば同じようなグラフをかけるのでしょうか?

お手数かけますがよろしくお願いいたします。

黒田さん

コメントありがとうございます。

>Graph0の描画方法につきまして教えてください。

→Graph0 は、トレースアピアランスの修正ダイアログで、 f(z)カラーにプロットしたウェーブを指定しています。コマンドだと次のような感じです。

Make/o/n=100 aaa=x
Display aaa
ModifyGraph mode=3,marker=16,msize=2
ModifyGraph zColor(aaa)={aaa,*,*,Rainbow}

お試しください。


井上さん

コメントいただきましてありがとうございます。
modifygraphでzcolorを使えばいいのですね。
教えていただいた内容で、実際に同じグラフをかけました。
どうもありがとうございました。
今後ともよろしくお願いいたします。

黒田

黒田さん

> modifygraphでzcolorを使えばいいのですね。

→zcolor に限らず、この f(z) の機能は、IGOR Pro の 2D グラフには欠かせない機能で、カラーだけでなく、マーカーのサイズや種類などを自由に指定できます。是非、ご活用ください!


コメントの投稿

Emailアドレスは表示されません。は必須項目です。
ヒューリンクス取り扱い製品の内容や購入に関するお問い合わせはヒューリンクスサイト連絡先へお願いいたします。投稿前にその他の注意事項もご覧ください。

HULINKS サイトの新着情報