外部インタフェース/API    

Java配列の機能

Javaオブジェクトをメソッドに渡したり、メソッドがその形式であると予想される場合には、配列に渡すことができます。この配列は、Java配列(他のメソッド呼び出しから出力、あるいはMATLAB内で作成される)、あるいはある状況下ではMATLABセル配列でなければなりません。本節では、MATLABでのJava配列の作成と操作方法を説明します。後の節では、Javaメソッドの呼び出しでのMATLABセル配列の利用法を説明します。

以下のトピックスを説明します。

Java配列の表現方法

用語「java配列」は、Javaクラスコンストラクタまたはメソッドの呼び出しから出力されたJavaオブジェクトの配列を表わします。javaArray関数を使ってMATLAB内部でJava配列を作成することも可能です。Java配列の構造は、MATLAB行列や配列の構造とは明らかに異なります。MATLABは、通常のMATLABのコマンドシンタックスを使って配列を操作できるように、可能な限りこれらの差異を隠します。同様に、Java配列を操作するときにつぎの違いを注意することが役立つ場合があります。

2次元以上の表現

Java言語における配列は、厳密に1次元構造で、長さでのみ判断されます。2次元配列を操作したい場合は、配列の配列を使って同じ構造を作成することができます。さらに次元を追加するには、配列の配列の配列として配列のレベルを追加します。行列や配列ベースのプログラミング言語としてMATLABで操作するときには、そのようなマルチレベルの配列を使いたい場合があります。

MATLABは、言語自体の一部分である行列や多次元配列のように取り扱うことにより、マルチレベルのJava配列の操作を簡単にします。行列を取り扱う場合に利用するのと同じMATLABシンタックスを使って、配列の配列の要素にアクセスします。配列にさらにレベルを追加する場合は、MATLABは、多次元MATLAB配列であるかのように構造体にアクセスし、操作することが可能です。

下図の左側は、1次元、2次元、3次元のJava配列を表わします。各々の右側は、MATLABで同じ配列が表わされる方法です(1次元配列は、列ベクトルとして表わされます)。

配列のインデックス

Java配列のインデックスは、MATLAB配列のインデックスとは異なります。Java配列のインデックスはゼロベースで、MATLAB配列のインデックスは1ベースです。Javaプログラミングでは、y[0]からy[N-1]を使って長さNの配列yの要素にアクセスします。MATLABでこれらの配列を操作するときは、y(1)からy(N)のMATLABのインデックスのスタイルを使って同じ要素にアクセスします。そのため、10要素のJava配列があるとき、7番目の要素は、Javaでプログラムを書くときに用いるy[6]ではなく、y(7)を使って得られます。

Java配列の形状

Java配列は、全体の形状 がMATLAB配列とは異なる場合があります。2次元のMATLAB配列は、各行が同じ長さで、各列が同じ高さである長方形の形状です。この配列のJava版は、配列の配列で、この長方形形状を必ずしも保持しません。個々の低レベルの配列は、長さが異なる場合があります。

そのような配列の構造は、下記のように表わされます。これは、異なる長さの3つの基底の配列の配列です。用語ragged は、配列の終端が一様でない配列の要素の配置を記述するために一般に用いられます。Javaメソッドがこのタイプの構造の配列を出力するとき、MATLABによりセル配列に格納されます。

Java配列のサイズの解釈

MATLABのsizeコマンドを簡単なJava配列に適用するとき、出力される行数はJava配列の長さで、出力される列数は常に1です。

Java配列の配列のサイズを決定することは容易ではありません。Javaによって出力される、潜在的にでこぼこな形状である配列は、長方形行列と同じ方法で配列のサイズを決定することが不可能です。でこぼこのJava配列では、低レベル配列のサイズを表わす単一の値はありません。

size コマンドをJava配列の配列に適用するとき、結果の値は指定した配列の最上位を表わします。下記のJava配列に対して、

size(A)は、Aの最上位の配列の次元を出力します。配列の最上位は、サイズ3行1列です。

低レベルの配列のサイズ、たとえば行3の5要素配列を求めるには、行を明示的に指定します。

つぎのシンタックスを使って、sizeコマンドで次元を指定できます。しかし、これは非単項の次元のみであるため、最初の次元(dim=1)のサイズのみに対して有効です。

Java配列の次元数の解釈

Java配列に対して、単純な1レベルの配列であるか、マルチレベルであっても、MATLABのndimsコマンドは常に値2を出力し、配列内の次元数を表わします。これは、常に2に等しい最上位配列の次元数の基準です。


 未定義のメソッドの取り扱い方法 MATLAB内でのオブジェクトの配列の作成