この記事では、LabVIEWに関するクイズを出しています。
テーマは配列操作です。
測定したデータ、ファイルから読みだしたデータ、画像データ等、同じデータタイプのデータを複数ひとまとまりにして扱うことができる配列を使いこなせれば、やれることの幅がぐっと増えます。
クイズを通して、関数の仕様や使い方について気づくこともあると思います。
詳細ヘルプなどの、LabVIEWのヘルプ情報を見ずに何問正解できるか挑戦してみてください。
問題編
以下、問題をそれぞれ取り上げます。
各問題の答えは、解答編を見てみてください。
1D配列検索でヒットする条件
以下の図では、1D配列検索の関数でそれぞれの入力に対し指定した文字列がどこにあるかを検索しています。
入力している配列文字列および検索対象の文字列はすべて「¥コード」表示です。
要素の指標と要素の指標2にはどのような値が出るでしょうか?

解答はこちら
配列次元変更
以下の図では配列次元変更を使用して、入力した配列の次元を変更しようとしています。
このプログラムを実行した場合、出力配列はどのような結果となるでしょうか?

解答はこちら
クラスタから配列にしてまたクラスタに戻す
以下の図では、最初に4つの要素を持ったクラスタを配列に変換し、この配列を再びクラスタにする際に要素数を5にしています。
この状態でプログラムを実行した場合に最後のクラスタ表示器はどのような結果となるでしょうか?

解答はこちら
文字列の配列最大&最小
以下の図では、数値ではなく文字列の配列に対して配列最大&最小を適用しています。
このプログラムを実行したときの、最大値や最小値はそれぞれ何になるでしょうか?

解答はこちら
配列を生成する
配列には次元がありますが、異なる次元の配列を組み合わせる際には注が必要です。
以下の図で示した最終的な配列を得るために、間にどのような処理をおくでしょうか?

解答はこちら
指標配列の使い方
以下の図では指標配列の関数を使用しています。
プログラムを実行したときにそれぞれの「要素」出力はどんな値となるでしょうか?

解答はこちら
指標配列の使い方2
以下の図でも指標配列の関数を使用しています。
プログラムを実行したときにそれぞれの「要素」出力はどんな値となるでしょうか?

解答はこちら
インタリーブ
以下の図ではインタリーブ1D配列の関数を使用して二つの配列から一つの配列を生成しています。
プログラムを実行したときにそれぞれの「結果」出力はどのような値となるでしょうか?

解答はこちら
解答編
ではそれぞれの問題の解答を以下紹介します。
1D配列検索でヒットする条件
1D配列検索では、大文字小文字含め一致する要素があるかを探します。
また、標準表示では文字として明示的には見えない、スペースや改行文字なども一致していないといけません。
1D配列検索は、探す対象としているものが配列になかった場合には要素番号として-1を返すので、答えは「どちらの要素の指標も-1となる」です。

問題に戻る場合にはこちら
配列次元変更
次元変更の対象になる配列の要素数が、変更後のそれぞれの次元のサイズの積に一致しない場合には、変更後のサイズに合わせようとします。
今回の場合、0から5までの6つの要素に加えて、足りない要素2つ分はデフォルト値である0が入った配列を得られます。

問題に戻る場合にはこちら
クラスタから配列にしてまたクラスタに戻す
クラスタから配列に変換することで、元々のクラスタが持っていた要素を配列にすることができますが、この状態では要素数を指定する必要はありません。
しかし、逆に配列からクラスタにする場合にはクラスタの要素数を指定する必要があり、このとき配列サイズよりも大きい要素数を指定している場合、クラスタに変換すること自体はできますが、配列で定義された値以外はデフォルト値(数値なら0)が入ります。
なお、配列からクラスタに変換はプログラム実行中にクラスタの要素数を変更できないので注意が必要です。

問題に戻る場合にはこちら
文字列の配列最大&最小
そもそも(アルファベットの)文字列の配列の順番は大文字でアルファベット順の後に小文字でアルファベット順になります。
もしここに数を表す文字があった場合には、数が小さい文字が一番最初で次に大文字アルファベット順、小文字アルファベット順となります。

問題に戻る場合にはこちら
配列を生成する
次元の異なる配列同士を合体させるには配列連結追加を使用しますが、行方向に合体するのか列方向に合体するのかによって事情が違います。
行方向への追加に関してはそのまま関数を使えばいいのですが、列方向への追加に関しては一度2次元配列を転置して追加し、再び転置して元に戻す、という処理が必要になります。

問題に戻る場合にはこちら
指標配列の使い方
指標配列は、配列を扱う関数の中でも特によく使うものと思います。
ただし、指標番号を指定する際には負の数を受け付けません(他のプログラミング言語だと、負の数の場合最後の要素から後ろに数えて何番目、といった指定ができますがLabVIEWではそうなりません)。
指標配列の関数を縦に引き伸ばし2つ以上の入力、出力を設けた場合にもし指標番号の指定がなかったら、指定をした要素の次の要素を取り出すことになります。
今回の例で言えば、「-2」、「-1」、「0」、「1」の4つの要素を取り出していることになります。

問題に戻る場合にはこちら
指標配列の使い方2
上の問題と似ていますが、指標配列の関数は必ずしも全ての入力を指定する必要はありません。何も指定がなかった場合には、指定がある入力の次の要素、そのまた次の要素、といった具合で勝手にインクリメントして配列から値を取り出すことができます。

問題に戻る場合にはこちら
インタリーブ
複数の配列を交互に取り出すのにインタリーブは重宝します。
ただし、もし入力している配列のサイズがバラバラな場合、最も少ないサイズの配列の要素までしか扱わないので、サイズが一致していないと一部の配列要素を処理しなくなってしまうことに注意が必要です。
なお、配列の要素は何でもいいので、数値データタイプでNaNやInfなどの非数の値があってもこれは問題なく扱えます。

問題に戻る場合にはこちら
本記事の問題で取り上げた関数以外でも配列操作は数多くあり、行方向に対する操作、とか列方向に対する操作、とか2重のForループの自動指標付けした状態での出力といった、ややこしいものは多くあります。
小さなプログラムでそれぞれの関数の動作を実際に確認していくと使い方に徐々に慣れていけると思うので、特に初心者の方は苦労することが多いかもしれませんが頑張ってください。
別にこれらの問題に正解できたかを気にする必要はなく、むしろ「こんな風に使い方気を付けないといけないんだな」、という気づきがあって少しでも役に立てばうれしいです。
ここまで読んでいただきありがとうございました。
コメント