この記事は、初心者向けのまずこれシリーズ第9回の補足記事です。配列の操作についてもっと知りたい、という方向けにもう少し内容を補足しています。
LabVIEWでプログラムを書く中で、配列の操作はとても重要です。まとまったデータを処理するために頻繁に使う配列処理の関数は、関数パレット上の「配列」の項目にまとまっていて、ここから目的の操作にあった関数を選んで使います。
全ての関数を同じくらいの頻度で使うわけではないですが、そもそもの使い方を知らないと使いこなせないものなので、どんな風に各配列関数を使用するかを大まかに知っておくと後々役に立つと思います。
LabVIEWのバージョンが変わると新しい関数が増えていたりするのですが、配列関数もその例にもれずバージョンごとに多少配列関数の数が変わっていたりします。
この記事ではLabVIEW 2020をベースに紹介しています。
配列サイズ
配列サイズ関数は、配列の大きさを表す関数です。要素の数を出力してくれます。
対象とする配列は1次元配列である必要はなく、多次元配列でもいいのですが、多次元配列の場合には出力値も配列になっています。
指標配列
配列関数の中でもよく使用する関数です。要素番号を指定し、その要素を出力します。これも1次元配列だけでなく多次元配列を受け付けますが、入力の数によって結果が異なります(行、あるいは列だけを指定すると結果は入力よりも一つ次元が落ち、行も列も指定すると次元が二つ落ちる、といった具合です)。
部分配列置換
要素番号で指定した要素を、新規要素で置換する関数です。指定する要素の数で、置換する新規要素配列の次元が変わります。
配列要素挿入
入力配列に対して要素を挿入します。挿入する場所を指定しない場合には末尾に挿入することになります。
配列から削除
要素番号で指定した要素を入力の配列から削除します。削除された要素も取り出すことができます。
配列初期化
プログラムの中で配列を作り出すときに使用できます。配列初期化と部分配列置換を駆使して、作り出した配列をずっと再利用しながら余計な配列を無駄に作り出さないプログラムにするとメモリの節約になったりします。
入力配列は様々なデータタイプを受け付けるので、クラスタなんかも扱えます。
配列連結追加
配列どうしを連結します。この「連結」とは、ある配列と同じ次元の別の配列を連結して次元は変更しないパターンと、次元ごと変えるように配列を組み合わせるパターンの2種類があります。
部分配列
要素番号を指定して、入力した配列の一部を取り出すための処理です。大きな配列の特定の部分に対して処理を加えたいときに使用します。
配列最大最小
入力した配列の中身の要素に対し、最大値とその最大値をとる要素の要素番号、および最小値とその最小値を取る要素の要素番号を得ることができます。
たくさんのまとまったデータがあるときに、素早く特徴的な量である最大、最小値を探すのに役立ちます。
配列次元変更
配列の次元を変えることができます。この関数の縦の長さを変えることで変更後の配列の次元が決まります。
元々の入力配列の数よりも指定サイズが小さい場合には、指定したサイズ分にしかなりません。また、例えば入力配列の要素数が5である場合に次元を2と3と指定した場合、結果は2×3の配列になりますが、入力配列で指定されなかった分はデフォルト値(数字なら0)が入ることになります。
1D配列ソート
1次元配列限定ですが、順番を組み替えます。この組み換え時の規則は昇順となります。
2D配列ソート
2次元配列に対して昇順に組み替える関数です。2次元配列なので、行か列、どちらの要素を基準に組み替えるか指定します。
1D配列シャッフル/2D配列シャッフル
1次元配列に対し、要素の並びをランダムに入れ替えます。2次元配列に対しても別関数として用意されています。
1D配列反転
1次元配列に対し、要素の順番をさかさまにします。そのため、もし要素を降順に並べたい場合には、一度1D配列ソートをしてからこの1D配列反転をすることで実現できます。
1D配列検索
1次元配列を入力し、その中から探したい要素を指定してその要素の要素番号を知ることができます。もし指定した要素が入力した1次元配列にない場合には-1が出力されます。
1D配列分割
1次元配列を指定した要素番号で分割します。
1D配列回転
1次元配列の要素番号を指定した分だけずらします。配列が循環するイメージ、が分かりやすいかなと思います。
ずらす量をnとして指定しますが、これは負の数も受け付けます(ずらす方向が逆になります)。
配列要素を増分/配列要素を減分
入力した1次元配列の中で、指定した要素番号の要素だけ1を加えます。
1D配列補間
入力した1次元配列に対して値を補間します。入力は数値だけの配列以外に、(X,Y)を示したクラスタも受け付けることができます。
補間は線形です。例えば下の図のように、入力配列の要素1が4で要素が7の場合、これを(1,4)と(2,7)を通る直線とみなすと、y=3x+1の式と表せるので、指定する「小数指標またはx」が1.2の場合、計算結果からy=3×1.2+1=4.6となります。
次の「小数指標またはx」で2.5を指定している場合には、(2,7)と(3,8)が作る直線y=x+5に対して代入するので7.5となります。
しきい値1D配列
昇順の配列を入力する前提ですが、指定したしきい値を超える要素番号を出力します。この要素番号は、配列で通常使用する要素番号とは異なり、小数値もあり得ます。
これも線形補間になっています。例えば以下の図でyしきい値が3となっている場合、開始指標0から考えると、入力配列の指標番号1の要素1と、指標番号2の要素4がしきい値3をまたいでいます。(1,1)と(2,4)を結ぶ直線y=3x-2に対して、しきい値3を超えるxは3=3x-2よりx=5/3=1.6666・・・となっています。
インタリーブ1D配列
複数の1次元配列をまとめて新しい1次元配列を生成しますが、入力した配列の要素を交互に織り交ぜた配列となります。
入力配列の要素数がバラバラな場合、一番要素数が少ない数が採用されます。
デシメート1D配列
インタリーブの逆で、大きな1次元配列を入力してこれを分けますが、出力の数に応じて分配して個々の出力配列とします。
入力配列の要素数が、出力する配列の数で割り切れない場合には、均等の要素数分だけ割り振れるところまで割り振り、残った入力配列要素数は割り振られなくなります。
2D配列転置
いわゆる転置操作として、行と列を入れ替えます。
1D配列から重複を削除
入力した1次元配列から重複した要素があった場合にそれを削除します。
頻繁に使う関数もありますが、使用場面が限定的な関数もいろいろありますが、その頻度は作るプログラムの内容によっても変わるので優劣はつけていません。
まずどのようなことができるのか、どういった結果になるのかを大まかにでもいいので頭の中にイメージを持っておくと実際にプログラムを作るときに役立つと思います。
ここまで読んでいただきありがとうございました。
コメント