NdArray

공개 인터페이스 NdArray
알려진 간접 하위 클래스

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>
copyTo ( NdArray <T> dst)
이 배열의 내용을 대상 배열에 복사합니다.
추상 NdArraySequence <? NdArray <T>>를 확장합니다.
요소 (int 차원Idx)
지정된 차원에 있는 모든 요소의 시퀀스를 반환합니다.
추상 부울
같음 (객체 객체)
n차원 배열 간의 동등성을 확인합니다.
추상 NdArray <T>
(긴... 좌표) 가져오기
주어진 좌표에서 이 배열의 N차원 요소를 반환합니다.
추상 T
getObject (긴... 좌표)
주어진 좌표에서 찾은 스칼라 값을 반환합니다.
추상 NdArray <T>
읽기 ( DataBuffer <T> dst)
이 N차원 배열의 내용을 대상 버퍼로 읽어옵니다.
추상 NdArraySequence <? NdArray <T>>를 확장합니다.
스칼라 ()
이 배열에 있는 모든 스칼라의 시퀀스를 반환합니다.
추상 NdArray <T>
설정 ( NdArray <T> src, 긴... 좌표)
주어진 좌표에서 발견된 N차원 요소의 값을 할당합니다.
추상 NdArray <T>
setObject (T 값, 긴... 좌표)
주어진 좌표에서 발견된 스칼라 값을 할당합니다.
추상 NdArray <T>
슬라이스 ( 인덱스... 인덱스)
하나 이상의 차원을 지정된 인덱스 선택기에 매핑하여 이 배열의 다차원 보기(또는 조각)를 만듭니다.
추상 NdArray <T>
쓰기 ( DataBuffer <T> src)
소스 버퍼에서 이 N차원 배열의 내용을 씁니다.

상속된 메서드

공개 방법

공개 추상 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)

이 N차원 배열의 내용을 대상 버퍼로 읽어옵니다.

버퍼의 크기는 이 배열의 size() 보다 크거나 같아야 합니다. 그렇지 않으면 예외가 발생합니다. 복사 후에는 버퍼와 배열의 내용이 서로 영향을 주지 않고 독립적으로 변경될 수 있습니다.

매개변수
일광 대상 버퍼
보고
  • 이 배열
던지기
버퍼오버플로우예외 버퍼가 이 배열의 내용을 담을 수 없는 경우
참조

공개 추상 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 일부 좌표가 해당 차원의 한계를 벗어나는 경우

공개 추상 NdArray <T> 쓰기 ( DataBuffer <T> src)

소스 버퍼에서 이 N차원 배열의 내용을 씁니다.

버퍼의 크기는 이 배열의 size() 보다 크거나 같아야 합니다. 그렇지 않으면 예외가 발생합니다. 복사 후에는 버퍼와 배열의 내용이 서로 영향을 주지 않고 독립적으로 변경될 수 있습니다.

매개변수
소스 소스 버퍼
보고
  • 이 배열
던지기
BufferUnderflowException 버퍼에 이 배열에 쓸 데이터가 충분하지 않은 경우
참조