既知の間接サブクラス AbstractDenseNdArray <T、U はNdArray <T>> を拡張、 AbstractNdArray <T、U はNdArray <T>> を拡張、 BooleanDenseNdArray 、 BooleanNdArray 、 ByteDenseNdArray 、 ByteNdArray 、 DenseNdArray <T>、 DoubleDenseNdArray 、 DoubleNdArray 、 FloatDenseNdArray 、 dArray 、 IntDenseNdArray 、 IntNdArray 、 LongDenseNdArray 、 LongNdArray 、その他 11 個。 |
N 次元のデータ構造。
「NdArray」インターフェイスは、線形またはセグメント化できるデータ レコードの物理ストレージとその論理表現の間に抽象化を作成します。一般に、メモリ内の線形データ セグメントを直接マッピングすることにより、Java の標準的な多次元配列よりも優れたパフォーマンスを実現します。
DataBuffer
と同様、 NdArray
インスタンスは 64 ビットのインデックス付けをサポートしているため、非常に大きなデータ レコードのマッピングに使用できます。また、値を任意の方向に移動したり、値のサブセットのみを選択したりできる特別な座標もサポートしています。
使用例:
// Creates a 2x3x2 matrix (of rank 3)
FloatNdArray matrix3d = NdArrays.ofFloats(shape(2, 3, 2));
// Initialize sub-matrices data with vectors
matrix.set(NdArrays.vectorOf(1.0f, 2.0f), 0, 0)
.set(NdArrays.vectorOf(3.0f, 4.0f), 0, 1)
.set(NdArrays.vectorOf(5.0f, 6.0f), 0, 2)
.set(NdArrays.vectorOf(7.0f, 8.0f), 1, 0)
.set(NdArrays.vectorOf(9.0f, 10.0f), 1, 1)
.set(NdArrays.vectorOf(11.0f, 12.0f), 1, 2);
// Access the second 3x2 matrix (of rank 2)
FloatNdArray matrix = matrix3d.get(1);
// Access directly the float value at (1, 0) from the second matrix
assertEquals(9.0f, matrix.getFloat(1, 0));
パブリックメソッド
抽象NdArray <T> | |
抽象NdArraySequence <? NdArray <T>> を拡張します | 要素(int dimensionIdx) 指定された次元のすべての要素のシーケンスを返します。 |
抽象ブール値 | 等しい(オブジェクトオブジェクト) n 次元配列間の等価性をチェックします。 |
抽象NdArray <T> | get (長い...座標) 指定された座標にあるこの配列の N 次元要素を返します。 |
抽象的なT | getObject (長い...座標) 指定された座標で見つかったスカラーの値を返します。 |
抽象NdArray <T> | |
抽象NdArraySequence <? NdArray <T>> を拡張します | スカラー() この配列内のすべてのスカラーのシーケンスを返します。 |
抽象NdArray <T> | |
抽象NdArray <T> | setObject (T 値、長い...座標) 指定された座標で見つかったスカラーの値を割り当てます。 |
抽象NdArray <T> | |
抽象NdArray <T> |
継承されたメソッド
パブリックメソッド
パブリック抽象NdArray <T> copyTo ( NdArray <T> dst)
この配列の内容を宛先配列にコピーします。
宛先配列のshape()
この配列の形状と等しい必要があります。そうでない場合は、例外がスローされます。コピー後、両方の配列の内容は、相互に影響を与えることなく、独立して変更できます。
パラメータ
夏時間 | この配列の内容のコピーを受け取る配列 |
---|
返品
- この配列
投げる
IllegalArgumentException | dst の形状がこの配列の形状と等しくない場合 |
---|
パブリック抽象NdArraySequence <? NdArray <T>>要素を拡張します(int dimensionIdx)
指定された次元のすべての要素のシーケンスを返します。
論理的には、N 次元配列は単一のベクトルに平坦化できます。ここで、 size()
値の合計については(n - 1)
番目の要素のスカラーが(n)
番目の要素のスカラーよりも前になります。
たとえば、 [x, y]
軸上のnxm
行列の場合、要素は次の順序で反復されます。
x 0 y 0 、 x 0 y 1 、 ...、 x 0 y m-1 、 x 1 y 0 、 x 1 y 1 、 ...、 x n-1 y m-1
その後、 forEach(Consumer)
またはforEachIndexed(BiConsumer)
を呼び出すことにより、返されたシーケンスを反復して各要素にアクセスできます。
// Iterate matrix for initializing each of its vectors
matrixOfFloats.elements(0).forEach(v -> {
v.set(vector(1.0f, 2.0f, 3.0f));
);
// Iterate a vector for reading each of its scalar
vectorOfFloats.scalars().forEachIdx((coords, s) -> {
System.out.println("Value " + s.getFloat() + " found at " + coords);
});
}
パラメータ
寸法Idx | 次元のインデックス |
---|
返品
NdArray
シーケンス
投げる
IllegalArgumentException | dimensionIdx がこの配列の総次元数以上の場合 |
---|
public abstract boolean等しい(オブジェクト obj)
n 次元配列間の等価性をチェックします。
このオブジェクトが同じ形状、タイプの別のNdArray
であり、要素が等しく、同じ順序である場合、配列は別のオブジェクトと等しいです。例えば:
IntNdArray array = NdArrays.ofInts(Shape.of(2, 2))
.set(NdArrays.vectorOf(1, 2), 0)
.set(NdArrays.vectorOf(3, 4), 1);
assertEquals(array, StdArrays.ndCopyOf(new int[][] { {1, 2
, {3, 4} })); // true
assertEquals(array, StdArrays.ndCopyOf(new Integer[][] { {1, 2}, {3, 4} })); // true, as Integers are equal to ints
assertNotEquals(array, NdArrays.vectorOf(1, 2, 3, 4)); // false, different shapes
assertNotEquals(array, StdArrays.ndCopyOf(new int[][] { {3, 4}, {1, 2} })); // false, different order
assertNotEquals(array, StdArrays.ndCopyOf(new long[][] { {1L, 2L}, {3L, 4L} })); // false, different types
}
2 つの配列間の同等性を検証するために必要な計算は場合によってはコストがかかる可能性があるため、パフォーマンスが重要なクリティカル パスではこの方法を使用しないことをお勧めします。
パラメータ
オブジェクト | この配列を比較するオブジェクト |
---|
返品
- この配列が指定されたオブジェクトと等しい場合は true
public abstract NdArray <T> get (long... 座標)
指定された座標にあるこの配列の N 次元要素を返します。
この配列の任意の次元の要素を取得できます。たとえば、座標の数がこの配列の次元数と等しい場合、ランク 0 (スカラー) 配列が返され、その値は `array.getObject()` を呼び出すことで取得できます。
コピーが含まれないため、返された要素に適用される変更はすべて、この配列のデータにも影響します。
このメソッドの呼び出しは、この配列を単一のスカラーでスライスするのと同等でより効率的な方法であることに注意してください。つまり、 array.get(x, y, z)
はarray.slice(at(x), at(y), at(z))
パラメータ
座標 | アクセスする要素の座標。この配列を返すものはありません |
---|
返品
- このインデックスの要素
投げる
IndexOutOfBoundsException | 一部の座標がそれぞれの次元の制限外にある場合 |
---|
public abstract T getObject (長い...座標)
指定された座標で見つかったスカラーの値を返します。
スカラー要素にアクセスするには、指定された座標の数がこの配列の次元数 (つまり、そのランク) と等しくなければなりません。例えば:
FloatNdArray matrix = NdArrays.ofFloats(shape(2, 2)); // matrix rank = 2
matrix.getObject(0, 1); // succeeds, returns 0.0f
matrix.getObject(0); // throws IllegalRankException
FloatNdArray scalar = matrix.get(0, 1); // scalar rank = 0
scalar.getObject(); // succeeds, returns 0.0f
floatArray.getFloat(0);
。 パラメータ
座標 | 解決するスカラーの座標 |
---|
返品
- そのスカラーの値
投げる
IndexOutOfBoundsException | 一部の座標がそれぞれの次元の制限外にある場合 |
---|---|
IllegalRankException | 座標の数がスカラー要素にアクセスするのに十分でない場合 |
public abstract NdArray <T> read ( DataBuffer <T> dst)
パブリック抽象NdArraySequence <? NdArray <T>>スカラーを拡張します()
この配列内のすべてのスカラーのシーケンスを返します。
これはelements(shape().numDimensions() - 1)
を呼び出すことと同じです。
返品
NdArray
シーケンス
public abstract NdArray <T>セット( NdArray <T> src、long... 座標)
指定された座標で見つかった N 次元要素の値を割り当てます。
指定される座標の数は、0 からランク - 1 までの任意の値になります。次に例を示します。
FloatNdArray matrix = NdArrays.ofFloats(shape(2, 2)); // matrix rank = 2
matrix.set(vector(10.0f, 20.0f), 0); // success
matrix.set(scalar(10.0f), 1, 0); // success
パラメータ
送信元 | 割り当てる値の配列 |
---|---|
座標 | 割り当てる要素の座標 |
返品
- この配列
投げる
IndexOutOfBoundsException | 一部の座標がそれぞれの次元の制限外にある場合 |
---|
public abstract NdArray <T> setObject (T 値、long... 座標)
指定された座標で見つかったスカラーの値を割り当てます。
スカラー要素にアクセスするには、指定された座標の数がこの配列の次元数 (つまり、そのランク) と等しくなければなりません。例えば:
FloatNdArray matrix = NdArrays.ofFloats(shape(2, 2)); // matrix rank = 2
matrix.setObject(10.0f, 0, 1); // succeeds
matrix.setObject(10.0f, 0); // throws IllegalRankException
FloatNdArray scalar = matrix.get(0, 1); // scalar rank = 0
scalar.setObject(10.0f); // succeeds
floatArray.setFloat(10.0f, 0);
パラメータ
価値 | 割り当てる値 |
---|---|
座標 | 割り当てるスカラーの座標 |
返品
- この配列
投げる
IndexOutOfBoundsException | 一部の座標がそれぞれの次元の制限外にある場合 |
---|---|
IllegalRankException | 座標の数がスカラー要素にアクセスするのに十分でない場合 |
public abstract NdArray <T>スライス(インデックス...インデックス)
1 つ以上の次元を指定されたインデックス セレクターにマッピングすることにより、この配列の多次元ビュー (またはスライス) を作成します。
スライスを使用すると、任意の軸で N 次元配列を走査したり、関心のある要素のみをフィルタリングしたりできます。たとえば、 [x, y]
軸上の特定の行列の場合、すべてのx
に対してy=0
の要素を反復することができます。
コピーが含まれないため、返されたスライスに適用される変更はすべて、この配列のデータにも影響します。
使用例:
FloatNdArray matrix3d = NdArrays.ofFloats(shape(3, 2, 4)); // with [x, y, z] axes
// Iterates elements on the x axis by preserving only the 3rd value on the z axis,
// (i.e. [x, y, 2])
matrix3d.slice(all(), all(), at(2)).elements(0).forEach(m -> {
assertEquals(shape(2), m); // y=2, z=0 (scalar)
);
// Creates a slice that contains only the last element of the y axis and elements with an
// odd `z` coordinate.
FloatNdArray slice = matrix3d.slice(all(), at(1), odd());
assertEquals(shape(3, 2), slice.shape()); // x=3, y=0 (scalar), z=2 (odd coordinates)
// Iterates backward the elements on the x axis
matrix3d.slice(flip()).elements(0).forEach(m -> {
assertEquals(shape(2, 4), m); // y=2, z=4
});
}
パラメータ
インデックス | この配列の次元 0 から始まる次元ごとのインデックス セレクター。 |
---|
返品
- インデックス選択の結果の要素
投げる
IndexOutOfBoundsException | 一部の座標がそれぞれの次元の制限外にある場合 |
---|