NdArray

interfejs publiczny NdArray
Znane podklasy pośrednie

Struktura danych o N-wymiarach.

Interfejs „NdArray” tworzy abstrakcję pomiędzy fizycznym przechowywaniem rekordu danych, który może być liniowy lub segmentowany, a jego logiczną reprezentacją. Ogólnie rzecz biorąc, osiągają lepszą wydajność niż standardowe tablice wielowymiarowe w Javie, mapując bezpośrednio liniowe segmenty danych w pamięci.

Podobnie jak DataBuffer , instancje NdArray obsługują indeksowanie 64-bitowe, dzięki czemu można ich używać do mapowania bardzo dużych rekordów danych. Obsługują także specjalne współrzędne, które umożliwiają przemieszczanie ich wartości w dowolnym kierunku lub wybranie tylko ich podzbioru.

Przykład użycia:

// 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));
 

Metody publiczne

abstrakcyjna NdArray <T>
copyTo ( NdArray <T> dst)
Skopiuj zawartość tej tablicy do tablicy docelowej.
abstrakcyjna sekwencja NdArray <? rozszerza NdArray <T>>
elementy (int wymiarIdx)
Zwraca sekwencję wszystkich elementów w danym wymiarze.
abstrakcyjna wartość logiczna
równa się (obiekt obiektu)
Sprawdza równość między tablicami n-wymiarowymi.
abstrakcyjna NdArray <T>
uzyskać (długie... współrzędne)
Zwraca element N-wymiarowy tej tablicy o podanych współrzędnych.
streszczenie T
getObject (długie... współrzędne)
Zwraca wartość skalara znalezionego przy podanych współrzędnych.
abstrakcyjna NdArray <T>
czytaj ( Bufor danych <T> dst)
Przeczytaj zawartość tej N-wymiarowej tablicy do bufora docelowego.
abstrakcyjna sekwencja NdArray <? rozszerza NdArray <T>>
skalary ()
Zwraca sekwencję wszystkich skalarów w tej tablicy.
abstrakcyjna NdArray <T>
set ( NdArray <T> src, długie... współrzędne)
Przypisuje wartość elementu N-wymiarowego znalezionego przy podanych współrzędnych.
abstrakcyjna NdArray <T>
setObject (wartość T, długie... współrzędne)
Przypisuje wartość skalara znalezionego przy podanych współrzędnych.
abstrakcyjna NdArray <T>
plasterek ( Indeks... indeksy)
Tworzy wielowymiarowy widok (lub wycinek) tej tablicy, mapując jeden lub więcej wymiarów na dane selektory indeksu.
abstrakcyjna NdArray <T>
napisz ( Bufor danych <T> src)
Zapisz zawartość tej N-wymiarowej tablicy z bufora źródłowego.

Metody dziedziczone

Metody publiczne

publiczna abstrakcja NdArray <T> copyTo ( NdArray <T> dst)

Skopiuj zawartość tej tablicy do tablicy docelowej.

shape() tablicy docelowej musi być równa kształtowi tej tablicy, w przeciwnym razie zostanie zgłoszony wyjątek. Po skopiowaniu zawartość obu tablic można zmieniać niezależnie, bez wzajemnego wpływu.

Parametry
dst array , aby otrzymać kopię zawartości tej tablicy
Zwroty
  • ten układ
Rzuca
Wyjątek IllegalArgument jeśli kształt dst nie jest równy kształtowi tej tablicy

publiczne streszczenie NdArraySequence <? rozszerza elementy NdArray <T>> (int wymiarIdx)

Zwraca sekwencję wszystkich elementów w danym wymiarze.

Logicznie rzecz biorąc, tablicę N-wymiarową można spłaszczyć w pojedynczym wektorze, gdzie skalary (n - 1) -tego elementu poprzedzają skalary (n) -tego elementu, co daje w sumie wartości size() .

Na przykład, mając macierz nxm na osiach [x, y] , elementy są iterowane w następującej kolejności:

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

Zwróconą sekwencję można następnie iterować, aby odwiedzić każdy element, wywołując funkcję forEach(Consumer) lub 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);
    });
 }

Parametry
wymiarIdx indeks wymiaru
Zwroty
  • sekwencja NdArray
Rzuca
Wyjątek IllegalArgument jeśli dimensionIdx jest większy lub równy całkowitej liczbie wymiarów tej tablicy

publiczna wartość logiczna abstrakcyjna równa się (obiekt obiektu)

Sprawdza równość między tablicami n-wymiarowymi.

Tablica jest równa innemu obiektowi, jeśli ten obiekt jest inną NdArray tego samego kształtu, typu, a elementy są równe i w tej samej kolejności. Na przykład:

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
 }

Należy pamiętać, że obliczenia wymagane do sprawdzenia równości dwóch tablic mogą być w niektórych przypadkach kosztowne, dlatego zaleca się, aby nie stosować tej metody w ścieżce krytycznej, w której liczy się wydajność.

Parametry
obj obiekt, z którym chcesz porównać tę tablicę
Zwroty
  • true, jeśli ta tablica jest równa podanemu obiektowi

publiczny streszczenie NdArray <T> get (długie... współrzędne)

Zwraca element N-wymiarowy tej tablicy o podanych współrzędnych.

Można pobrać elementy dowolnego wymiaru tej tablicy. Na przykład, jeśli liczba współrzędnych jest równa liczbie wymiarów tej tablicy, zwracana jest tablica o randze 0 (skalarna), której wartość można następnie uzyskać wywołując funkcję `array.getObject()`.

Wszelkie zmiany zastosowane do zwróconych elementów wpływają również na dane tej tablicy, ponieważ nie ma w tym przypadku żadnej kopii.

Należy zauważyć, że wywołanie tej metody jest równoważnym i skuteczniejszym sposobem podzielenia tej tablicy na pojedynczy skalar, tj. array.get(x, y, z) jest równe array.slice(at(x), at(y), at(z))

Parametry
współrzędne współrzędne elementu, do którego chcesz uzyskać dostęp, żadna nie zwróci tej tablicy
Zwroty
  • element o tym indeksie
Rzuca
Wyjątek IndexOutOfBounds jeśli niektóre współrzędne znajdują się poza granicami ich odpowiednich wymiarów

public streszczenie T getObject (długie... współrzędne)

Zwraca wartość skalara znalezionego przy podanych współrzędnych.

Aby uzyskać dostęp do elementu skalarnego, liczba podanych współrzędnych musi być równa liczbie wymiarów tej tablicy (tzn. jej rangi). Na przykład:

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
 
Uwaga: jeśli ta tablica przechowuje wartości typu pierwotnego, preferuj użycie metody wyspecjalizowanej w podklasie dla tego typu. Na przykład floatArray.getFloat(0); .

Parametry
współrzędne współrzędne skalara do rozwiązania
Zwroty
  • wartość tego skalara
Rzuca
Wyjątek IndexOutOfBounds jeśli niektóre współrzędne znajdują się poza granicami ich odpowiednich wymiarów
Wyjątek IllegalRank jeśli liczba współrzędnych nie jest wystarczająca, aby uzyskać dostęp do elementu skalarnego

publiczny streszczenie NdArray <T> odczyt ( DataBuffer <T> dst)

Przeczytaj zawartość tej N-wymiarowej tablicy do bufora docelowego.

Rozmiar bufora musi być równy lub większy od size() tej tablicy, w przeciwnym razie zostanie zgłoszony wyjątek. Po skopiowaniu zawartość bufora i tablicy można zmieniać niezależnie, bez wzajemnego wpływu.

Parametry
dst bufor docelowy
Zwroty
  • ten układ
Rzuca
Wyjątek BufferOverflow jeśli bufor nie może pomieścić zawartości tej tablicy
Zobacz też

publiczne streszczenie NdArraySequence <? rozszerza skalary NdArray <T>> ()

Zwraca sekwencję wszystkich skalarów w tej tablicy.

Jest to równoważne wywołaniu elements(shape().numDimensions() - 1)

Zwroty
  • sekwencja NdArray

publiczny zestaw abstrakcyjny NdArray <T> ( NdArray <T> src, długie... współrzędne)

Przypisuje wartość elementu N-wymiarowego znalezionego przy podanych współrzędnych.

Liczba podanych współrzędnych może wynosić od 0 do rangi - 1. Na przykład:

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
 

Parametry
źródło tablica wartości do przypisania
współrzędne współrzędne elementu do przypisania
Zwroty
  • ten układ
Rzuca
Wyjątek IndexOutOfBounds jeśli niektóre współrzędne znajdują się poza granicami ich odpowiednich wymiarów

public streszczenie NdArray <T> setObject (wartość T, długie... współrzędne)

Przypisuje wartość skalara znalezionego przy podanych współrzędnych.

Aby uzyskać dostęp do elementu skalarnego, liczba podanych współrzędnych musi być równa liczbie wymiarów tej tablicy (tzn. jej rangi). Na przykład:

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
 
Uwaga: jeśli ta tablica przechowuje wartości typu pierwotnego, preferuj użycie metody wyspecjalizowanej w podklasie dla tego typu. Na przykład floatArray.setFloat(10.0f, 0);

Parametry
wartość wartość do przypisania
współrzędne współrzędne skalara do przypisania
Zwroty
  • ten układ
Rzuca
Wyjątek IndexOutOfBounds jeśli niektóre współrzędne znajdują się poza granicami ich odpowiednich wymiarów
Wyjątek IllegalRank jeśli liczba współrzędnych nie jest wystarczająca, aby uzyskać dostęp do elementu skalarnego

publiczna abstrakcja NdArray <T> wycinek ( Indeks... indeksy)

Tworzy wielowymiarowy widok (lub wycinek) tej tablicy, mapując jeden lub więcej wymiarów na dane selektory indeksu.

Plasterki umożliwiają przechodzenie przez N-wymiarową tablicę w dowolnej jej osi i/lub filtrowanie tylko interesujących ją elementów. Na przykład dla danej macierzy na osiach [x, y] możliwe jest iterowanie elementów przy y=0 dla wszystkich x .

Wszelkie zmiany zastosowane do zwróconego wycinka wpływają również na dane tej tablicy, ponieważ nie ma w tym przypadku żadnej kopii.

Przykład użycia:

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
    });
 }

Parametry
indeksy selektory indeksu według wymiarów, zaczynając od wymiaru 0 tej tablicy.
Zwroty
  • element wynikający z wyboru indeksu
Rzuca
Wyjątek IndexOutOfBounds jeśli niektóre współrzędne znajdują się poza granicami ich odpowiednich wymiarów

publiczny streszczenie NdArray <T> zapis ( DataBuffer <T> src)

Zapisz zawartość tej N-wymiarowej tablicy z bufora źródłowego.

Rozmiar bufora musi być równy lub większy od size() tej tablicy, w przeciwnym razie zostanie zgłoszony wyjątek. Po skopiowaniu zawartość bufora i tablicy można zmieniać niezależnie, bez wzajemnego wpływu.

Parametry
źródło bufor źródłowy
Zwroty
  • ten układ
Rzuca
Wyjątek BufferUnderflow jeśli w buforze nie ma wystarczającej ilości pozostałych danych do zapisania w tej tablicy
Zobacz też