알려진 간접 하위 클래스 AbstractDenseNdArray <T, U 확장 NdArray <T>>, AbstractNdArray <T, U 확장 NdArray <T>>, BooleanDenseNdArray , BooleanNdArray , ByteDenseNdArray , ByteNdArray , DenseNdArray <T>, DoubleDenseNdArray , DoubleNdArray , FloatDenseNdArray , FloatNdArray , In tDenseNdArray , 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 차원Idx) 지정된 차원에 있는 모든 요소의 시퀀스를 반환합니다. |
추상 부울 | 같음 (객체 객체) n차원 배열 간의 동등성을 확인합니다. |
추상 NdArray <T> | (긴... 좌표) 가져오기 주어진 좌표에서 이 배열의 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 차원Idx).
지정된 차원에 있는 모든 요소의 시퀀스를 반환합니다.
논리적으로 N차원 배열은 단일 벡터에서 평면화될 수 있습니다. 여기서 (n - 1)
번째 요소의 스칼라는 (n)
번째 요소의 스칼라보다 앞에 있으므로 총 size()
값이 됩니다.
예를 들어, [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 이 배열의 전체 차원 수보다 크거나 같은 경우 |
---|
공개 추상 부울은 (객체 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
}
두 어레이 간의 동등성을 확인하는 데 필요한 계산은 경우에 따라 비용이 많이 들 수 있으므로 성능이 중요한 중요한 경로에서는 이 방법을 사용하지 않는 것이 좋습니다.
매개변수
객체 | 이 배열을 비교할 객체 |
---|
보고
- 이 배열이 제공된 객체와 같으면 true
공개 추상 NdArray <T> 가져오기 (긴... 좌표)
주어진 좌표에서 이 배열의 N차원 요소를 반환합니다.
이 배열의 모든 차원 요소를 검색할 수 있습니다. 예를 들어, 좌표 수가 이 배열의 차원 수와 같으면 순위 0(스칼라) 배열이 반환되며, 이 값은 `array.getObject()`를 호출하여 얻을 수 있습니다.
반환된 요소에 적용된 모든 변경 사항은 관련된 복사본이 없으므로 이 배열의 데이터에도 영향을 미칩니다.
이 메소드를 호출하는 것은 이 배열을 단일 스칼라로 분할하는 동등하고 더 효율적인 방법입니다. 즉 array.get(x, y, z)
는 array.slice(at(x), at(y), at(z))
매개변수
좌표 | 액세스할 요소의 좌표, 어느 것도 이 배열을 반환하지 않습니다. |
---|
보고
- 이 인덱스의 요소
던지기
IndexOutOfBoundsException | 일부 좌표가 해당 차원의 한계를 벗어나는 경우 |
---|
공개 추상 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 | 일부 좌표가 해당 차원의 한계를 벗어나는 경우 |
---|---|
불법순위예외 | 스칼라 요소에 액세스하는 데 좌표 수가 충분하지 않은 경우 |
공개 추상 NdArray <T> 읽기 ( DataBuffer <T> dst)
공개 추상 NdArraySequence <? NdArray <T>> 스칼라 확장 ()
이 배열에 있는 모든 스칼라의 시퀀스를 반환합니다.
이는 elements(shape().numDimensions() - 1)
호출과 동일합니다.
보고
-
NdArray
시퀀스
공개 추상 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 | 일부 좌표가 해당 차원의 한계를 벗어나는 경우 |
---|
공개 추상 NdArray <T> setObject (T 값, 긴... 좌표)
주어진 좌표에서 발견된 스칼라 값을 할당합니다.
스칼라 요소에 액세스하려면 제공된 좌표 수가 이 배열의 차원 수(예: 순위)와 같아야 합니다. 예를 들어:
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 | 일부 좌표가 해당 차원의 한계를 벗어나는 경우 |
---|---|
불법순위예외 | 스칼라 요소에 액세스하는 데 좌표 수가 충분하지 않은 경우 |
공개 추상 NdArray <T> 슬라이스 ( 인덱스... 인덱스)
하나 이상의 차원을 지정된 인덱스 선택기에 매핑하여 이 배열의 다차원 보기(또는 조각)를 만듭니다.
슬라이스를 사용하면 축에서 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 | 일부 좌표가 해당 차원의 한계를 벗어나는 경우 |
---|