1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Igor Proで行列から特定の複数列を取り出して新しい行列を作成する。

Last updated at Posted at 2022-12-29

はじめに

Igor Proって日本語の情報少ないですよね。
1次元の配列 (colMaskwv、0と1で指定) によって指定された列のみを行列から取り出して新しい行列を作りたかったのですが、うまくいかなかったので作ってみました。
もっと簡単な方法がある気がするのですが、見つけられず
pythonならファンシーインデックスですぐできるのにと思いながら作りました。

もっと簡単な方法をぜひ誰か教えてください・・・・!

2023/01/12
@kitaka様にコメントいただき、より簡潔なコードをご教示いただきました。
コメント欄をご覧ください。
kitaka様、大変ありがとうございます・・・!

参考

前半はwavemetricsのForumに載っているコードを参考にさせていただきました
https://www.wavemetrics.com/node/20893

コード

extractCols.ipf
Function/wave remove_blank_cols(inwave)
	wave inwave
	matrixop/o/free inwaveCopy = inwave^t

	variable numOfRows = dimsize(inwaveCopy,0) 
	variable numOfCOls = dimsize(inwaveCopy,1)
	Redimension /N=(numOfRows*numOfCOls) inwaveCopy
	WaveTransform zapNaNs  inwaveCopy
	variable numOfRowsChanged = numpnts(inwaveCopy)/numOfCOls 
	Redimension /N=(numOfRowsChanged, numOfCOls) inwaveCopy
	matrixop/o destWave = inwaveCopy^t
	return destWave
end

Function/wave extractCols(wv, colMaskwv)
	wave wv, colMaskwv
	matrixop/o/free inwave = wv+1
	matrixop/o/free extractedWave = scalecols(inwave, colMaskwv)
	matrixop/o/free extractedWave = replace(extractedWave, 0, NaN)
	wave destWave = remove_blank_cols(extractedWave)
	matrixop/o destWave = destwave-1
	return destWave
end

使い方

使い方は単純で、対象行列をwv, 抽出したい列を1, 削除したい列を0で指定した配列をcolMaskWvに入れます。

wv = 
\begin{pmatrix}
0 & 1 & 2 \\
0 & 1 & 2 \\
0 & 1 & 2
\end{pmatrix}\\
\\
colMaskWv = 
\begin{pmatrix}
0 & 1 & 1 \\
\end{pmatrix}

なら

destWave = 
\begin{pmatrix}
1 & 2\\
1 & 2 \\
1 & 2
\end{pmatrix}  

です

colMaskWvを適当に変更すれば、任意の組み合わせの列を取り出せるはずです

ちなみにマニュアルを見るとWavetransformのところでmultidimensionの時にはmatrixopのreplaceNaNsを使いなさいと書いてありますが、こちらでは置換するだけなのでNaNの行や列を削除することができませんでした。

おわりに

Igor Proで行列から特定の複数列を取り出して新しい行列にするスクリプトを作ってみました。
本当にこれ、ほかの方法ないんでしょうか?? 私の探し方が下手なだけなきがすごくしています。。。

1
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?