この記事で扱っていること
- 配列から2番目、3番目に大きい値を取得する方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWで扱うデータタイプの中でも頻繁に使用されるものの一つが配列、特に数値配列だと思います。
配列には多くの関数が用意されており、プログラムを書けるようになるにはある程度自由に使いこなせる必要があります。
そんな配列関数の一つに、配列最大最小というものがあり、配列の中で最大値と最小値およびそれらの値に対する指標番号を取得できます。
ただ、これらはあくまで最大最小しか取得できないため、例えば2番目に大きい値を取得することはできません。
そこで、最大、つまり1番大きい値以降の2番目に大きい値、3番目に大きい値・・・について調べる機能を作ってみました。
どんな結果になるか
機能としては、もともとの配列の中で、その要素が何番目に大きいかを表示させます。このとき、元の配列の順番は入れ替えません。
このままだと見にくいので、試しにグラフに表示させるようにします。1番大きい値を金色の四角で、2番目は銀、3番目は銅色の四角で囲うようにすることで、見やすくすることができます。
以下の図は少し見にくいですが、配列の要素番号2の値が一番大きいので、金色の四角で囲まれています。
また、表形式で、1番目、2番目、3番目に大きい値とその指標番号を表示させることもできます。
プログラムの構造
配列の中で、各要素がその配列内で何番目に大きいか知るために、配列最大最小を使用しています。この関数をそのまま使っても常に同じ最大値しか得られないため、最大値を見つけたらその値を配列から削除して新たな配列を用意し、これに対し再び配列最大最小を適用します。
グラフに表示させる場合には、この順番の値で0(つまり1番大きい値)、1(2番目に大きい値)、2(3番目に大きい値)をそれぞれ見つけます。
同じような処理が続くので、サブVI化しています。
サブVIの中身は以下のようになっています。数珠つなぎにしてワイヤがなるべくごちゃごちゃしないように、入力値をそのまま出力している部分があります。
また、ハイライト時にはプロットの設定にも気を配る必要があります(デフォルトのプロット設定だとあまり見やすくありません)
表に表す場合には、それぞれの値を抽出するだけですね。
配列連結追加は行方向にしか連結できないため、Forループを抜けた後に一度行と列の配置を2D配列転置で入れ替えて、配列連結追加した後に再び転置をさせて、複数列リストボックスの「項目名」プロパティに配線しています。
大きい値ではなく小さい値を見つける場合
上で紹介したのは2番目に大きい、3番目に大きい値ですが、そうではなく、2番目に小さい、3番目に小さい値も簡単に取得することができます。
サブVIの中で、逆から数えていく、というのがポイントになります。
配列サイズを取得してこの値から「何番目?」の値を引くことで逆から数えるようにしています。
この記事では、配列の最大最小だけでなく、2番目に大きい/小さい、3番目に大きい/小さい値の抽出の方法を紹介しました。当然、4番目、5番目・・・の値についても同じ仕組みで抽出することができます。複数の値について知りたいという場合に参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント