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 DimensionIdx)
Возвращает последовательность всех элементов заданного измерения.
абстрактное логическое значение
равно (Объект obj)
Проверяет равенство между n-мерными массивами.
абстрактный NdArray <T>
получить (длинные... координаты)
Возвращает N-мерный элемент этого массива по заданным координатам.
абстрактная Т
getObject (длинные... координаты)
Возвращает значение скаляра, найденного в заданных координатах.
абстрактный NdArray <T>
чтение ( DataBuffer <T> dst)
Считайте содержимое этого N-мерного массива в целевой буфер.
абстрактный NdArraySequence <? расширяет NdArray <T>>
скаляры ()
Возвращает последовательность всех скаляров в этом массиве.
абстрактный NdArray <T>
set ( NdArray <T> src, long... координаты)
Присваивает значение N-мерного элемента, найденного по заданным координатам.
абстрактный NdArray <T>
setObject (значение T, длинные... координаты)
Присваивает значение скаляра, найденного в заданных координатах.
абстрактный NdArray <T>
срез ( Индекс... индексы)
Создает многомерное представление (или срез) этого массива путем сопоставления одного или нескольких измерений с заданными селекторами индекса.
абстрактный NdArray <T>
запись ( DataBuffer <T> источник)
Запишите содержимое этого N-мерного массива из исходного буфера.

Унаследованные методы

Публичные методы

общедоступный абстрактный NdArray <T> copyTo ( NdArray <T> dst)

Скопируйте содержимое этого массива в целевой массив.

shape() целевого массива должна быть равна форме этого массива, иначе будет выдано исключение. После копирования содержимое обоих массивов можно изменять независимо, не затрагивая друг друга.

Параметры
летнее время массив для получения копии содержимого этого массива
Возврат
  • этот массив
Броски
IllegalArgumentException если форма dst не равна форме этого массива

публичный абстрактный NdArraySequence <? расширяет элементы NdArray <T>> (int DimensionIdx)

Возвращает последовательность всех элементов заданного измерения.

Логично, что N-мерный массив может быть сведен в один вектор, где скаляры (n - 1) -го элемента предшествуют скалярам (n) -го элемента, для общего количества значений size() .

Например, для матрицы nxm по осям [x, y] элементы повторяются в следующем порядке:

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 больше или равен общему количеству измерений этого массива

публичное абстрактное логическое значение равно (Object 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> get (длинные... координаты)

Возвращает N-мерный элемент этого массива по заданным координатам.

Можно извлечь элементы любого измерения этого массива. Например, если количество координат равно количеству измерений этого массива, то возвращается массив ранга 0 (скалярный), значение которого затем можно получить, вызвав `array.getObject()`.

Любые изменения, примененные к возвращаемым элементам, также влияют на данные этого массива, поскольку копирование не требуется.

Обратите внимание, что вызов этого метода является эквивалентным и более эффективным способом разрезать этот массив на один скаляр, т.е. array.get(x, y, z) равен array.slice(at(x), at(y), at(z))

Параметры
координаты координаты элемента, к которому осуществляется доступ, никто не вернет этот массив
Возврат
  • элемент по этому индексу
Броски
Индексаутофбаундсисключение если некоторые координаты находятся за пределами соответствующего измерения

общедоступный абстрактный 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); .

Параметры
координаты координаты скаляра для решения
Возврат
  • значение этого скаляра
Броски
Индексаутофбаундсисключение если некоторые координаты находятся за пределами соответствующего измерения
IllegalRankException если количества координат недостаточно для доступа к скалярному элементу

общедоступное абстрактное чтение NdArray <T> ( DataBuffer <T> dst)

Считайте содержимое этого N-мерного массива в целевой буфер.

Размер буфера должен быть равен или больше size() этого массива, иначе будет выдано исключение. После копирования содержимое буфера и массива можно изменять независимо, не затрагивая друг друга.

Параметры
летнее время буфер назначения
Возврат
  • этот массив
Броски
исключение BufferOverflowException если буфер не может содержать содержимое этого массива
Смотрите также

публичный абстрактный 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
 

Параметры
источник массив значений для присвоения
координаты координаты элемента для назначения
Возврат
  • этот массив
Броски
Индексаутофбаундсисключение если некоторые координаты находятся за пределами соответствующего измерения

общедоступный абстрактный 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);

Параметры
ценить значение, которое нужно присвоить
координаты координаты скаляра, который нужно назначить
Возврат
  • этот массив
Броски
Индексаутофбаундсисключение если некоторые координаты находятся за пределами соответствующего измерения
IllegalRankException если количества координат недостаточно для доступа к скалярному элементу

общедоступный абстрактный фрагмент NdArray <T> ( индекс... индексы)

Создает многомерное представление (или срез) этого массива путем сопоставления одного или нескольких измерений с заданными селекторами индекса.

Срезы позволяют перемещаться по N-мерному массиву по любой его оси и/или фильтровать только интересующие элементы. Например, для данной матрицы по осям [x, y] можно перебирать элементы по y=0 для всех x .

Любые изменения, примененные к возвращенному фрагменту, также влияют на данные этого массива, поскольку копирование не требуется.

Пример использования:

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 этого массива.
Возврат
  • элемент, полученный в результате выбора индекса
Броски
Индексаутофбаундсисключение если некоторые координаты находятся за пределами соответствующего измерения

публичная абстрактная запись NdArray <T> ( DataBuffer <T> src)

Запишите содержимое этого N-мерного массива из исходного буфера.

Размер буфера должен быть равен или больше size() этого массива, иначе будет выдано исключение. После копирования содержимое буфера и массива можно изменять независимо, не затрагивая друг друга.

Параметры
источник исходный буфер
Возврат
  • этот массив
Броски
BufferUnderflowException если в буфере недостаточно оставшихся данных для записи в этот массив
Смотрите также