6

A を任意の次元 (私の場合は 2 または 3) の配列とします。次元数を事前に知らなくても、この配列を平坦化 (1D に変形) するにはどうすればよいですか?

次元数がわかっていれば、(「Array Size」関数の組み合わせを使用して) 要素の総数を簡単に取得し、この数値を使用して A を 1D に変形できます。残念ながら、「配列サイズ」関数自体は、要素数が次元数と等しい配列を返すため、最初の問題に戻ります。

3D 配列 (私が処理すると予想される配列の最も一般的なタイプ) の要素の総数を返す関数 (VI) を作成することで、問題を「解決」しました。リシェイプ機能。問題: アルゴリズムが 2D 配列で機能するにもかかわらず、2D 配列を受け入れない! (Labview では、配列コントロールは受け入れる次元の数について厳密であるように思われますが、たとえば Matlab ではそうではありません)。

適切な解決策は、「配列サイズ」で指定された配列のすべての要素を乗算して、要素の総数をすばやく取得する簡単な方法です。これをサブ VI でラップする必要はありません。全体として、この問題を解決する簡単で効率的な方法はありませんか? それはかなり標準的なはずです..

4

2 に答える 2

12

私はこれがあなたが探しているものだと信じています:

http://zone.ni.com/reference/en-XX/help/371361E-01/glang/reshape_array/

あなたがするだろう:

n-DimInputArray --> ArraySize --> 1D_SizesOUT

これは、すべての配列次元のサイズを含む 1D 配列を返します。

あなたは次に行きます:

1D_SizeOUT --> MultiplyArrayElements --> NumberOfElementsIn_n-DimInputArray

この値は ReshapeArray の次元サイズとして入ります - 完了。

http://zone.ni.com/reference/en-XX/help/371361E-01/glang/array_size/

http://zone.ni.com/reference/en-XX/help/371361E-01/glang/multiply_array_elements/

上記のコードのスニペットを次に示します。
ここに画像の説明を入力

于 2012-01-13T12:57:37.493 に答える
2

配列サイズの配列サイズを取得するだけで、次元数が得られます...

これをサブ VI に入れるには、未知の配列をバリアントに変換し、このバリアントと次元数をサブ VI に与えます。subvi 内で、次元の配列を含む「Variant to Data」。

于 2012-01-13T12:59:16.833 に答える