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

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

Igor proにおけるpythonのスライスっぽい処理

どうも旦那です。

 

 先ほど書いた通り、スライスっぽい処理に詰まってました。(こんな初歩で詰まってどうすんだという突込みはなしで)

med-ruka.hatenablog.com

 

さて、Igor上ではデータは"wave"という形をとります。これはたぶんそういう名前なので、受け入れるしかありません。waveには数値データを入れてグラフを作ったり、解析をすることができます。waveには2次元 (行列)以上のデータを入れることもできます。(確か上限は4次元)

 

私が詰まったのは「2次元waveのうちで1列を取り出す」という操作

Pythonであればスライスという操作で取り出せばいいのですが、どうもできない。

 

より詳しく書くと、

10行10列の行列があったとして、6列目を取り出したいとする。

pythonなら 行列aに対して a[:,5]でいいと思う。いわゆるスライスってやつ

これとおんなじ感じでIgor proで行列wave

make/n=10 newwave

newwave = wave[0,9][5]

としたところ、エラーが出た。

 

なんやかんやあって、わかったことはどうやらIgorではDuplicateをしないと取り出せないっぽい (もしかしたらほかの方法があるのかもしれないが、今のところしらない)

 

よって

Duplicate/R= [start row, endrow][startcol, endcol]
という風に指定していく
例えば10X10の2次元waveであった場合には,
Duplicate/R = [0,9][5] wave newwave
で6列目をコピー可能 

 

 

加えて*は最後までという意味で使用可能
duplicate /R = [0,*][5] wave newwave
で可能

 

どうもデータ型の違いが分かっていないから非効率なやり方をしている気がする。

 

加えて、おそらく今回の最大の問題点はPythonではスライスした時点で新しい配列が何らかの形で存在するのに対して、Igorでは切り出したデータの「入れ物」があって正しい形をしていないとどうやら取り出せないということなのだろうと感じた。

 

逆に言えば、より正しくあらかじめ入れ物を用意してやれば、最初のやり方でもできるのかもしれない。(例えばデータの次元など, スライスしたデータは10行1列の"2次元データ"になっているかもしれない。これだと用意した"1次元の入れ物"には入らない。) 

ただ、いろいろ疲れて、今は動けばなんでもいいやという気持ちなので、後日検証したら追記します・・・