Interface NdArraySequence<T extends NdArray<?>>

Type Parameters:
T - data type of the array being iterated
All Superinterfaces:
Iterable<T>
All Known Implementing Classes:
FastElementSequence, SingleElementSequence, SlicingElementSequence

public interface NdArraySequence<T extends NdArray<?>> extends Iterable<T>
A sequence of elements of an N-dimensional array.

An NdArraySequence is used to traverse an NdArray in a given dimension and visit each of its elements. For example, given a n x m matrix on the [x, y] axes, elements are iterated in the following order:

x0y0, x0y1, ..., x0ym-1, x1y0, x1y1, ..., xn-1ym-1

  • Method Details

    • forEachIndexed

      void forEachIndexed(BiConsumer<long[],T> consumer)
      Visit each elements of this iteration and their respective coordinates.

      Important: the consumer method should not keep a reference to the coordinates as they might be mutable and reused during the iteration to improve performance.

      Parameters:
      consumer - method to invoke for each elements
    • asSlices

      NdArraySequence<T> asSlices()
      Returns each element as a new slice.

      Unlike conventional Java collections, elements of a NdArraySequence are transient, i.e. new NdArray instances are allocated for each iteration. To improve performance, the same instance can be recycled to view all elements of this sequence, using a DataBufferWindow.

      In some cases though, it might be preferable to disable such optimizations to ensure that each element returned is a new slice of the original array. For example, if one or more elements visited must live beyond the scope of the sequence iteration, asSlices() makes sure that all elements returned by the sequence are unique instances.

          final List<IntNdArray> vectors = new ArrayList<>();
          IntNdArray matrix = NdArrays.ofInts(Shape.of(6, 6));
          ndArray.elements(0).forEach(e -> vectors::add);  // Not safe, as `e` might always be the same recycled instance
          ndArray.elements(0).asSlices().forEach(e -> vectors::add);  // Safe, each `e` is a distinct NdArray instance
      
      Returns:
      a sequence that returns each elements iterated as a new slice
      See Also: