NdArray

interface publique NdArray
Sous-classes indirectes connues

Une structure de données à N dimensions.

L'interface `NdArray` crée une abstraction entre le stockage physique d'un enregistrement de données, qui peut être linéaire ou segmenté, et sa représentation logique. En général, ils obtiennent de meilleures performances que les tableaux multidimensionnels standards en Java en mappant directement des segments de données linéaires en mémoire.

Comme DataBuffer , les instances NdArray prennent en charge l'indexation 64 bits afin de pouvoir être utilisées pour mapper des enregistrements de données très volumineux. Ils prennent également en charge des coordonnées spéciales qui permettent de parcourir leurs valeurs dans n'importe quelle direction ou de sélectionner uniquement un sous-ensemble d'entre elles.

Exemple d'utilisation :

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

Méthodes publiques

abstrait NdArray <T>
copyTo ( NdArray <T> dst)
Copiez le contenu de ce tableau dans le tableau de destination.
abstrait NdArraySequence <? étend NdArray <T>>
éléments (int dimensionIdx)
Renvoie une séquence de tous les éléments à une dimension donnée.
booléen abstrait
est égal à (Obj objet)
Vérifie l'égalité entre les tableaux à n dimensions.
abstrait NdArray <T>
obtenir (longues... coordonnées)
Renvoie l'élément à N dimensions de ce tableau aux coordonnées données.
résumé T
getObject (longues... coordonnées)
Renvoie la valeur du scalaire trouvé aux coordonnées données.
abstrait NdArray <T>
lire ( DataBuffer <T> dst)
Lisez le contenu de ce tableau à N dimensions dans le tampon de destination.
abstrait NdArraySequence <? étend NdArray <T>>
scalaires ()
Renvoie une séquence de tous les scalaires de ce tableau.
abstrait NdArray <T>
set ( NdArray <T> src, coordonnées longues...)
Attribue la valeur de l'élément à N dimensions trouvé aux coordonnées données.
abstrait NdArray <T>
setObject (valeur T, coordonnées longues...)
Attribue la valeur du scalaire trouvé aux coordonnées données.
abstrait NdArray <T>
tranche ( Index... indices)
Crée une vue (ou tranche) multidimensionnelle de ce tableau en mappant une ou plusieurs dimensions aux sélecteurs d'index donnés.
abstrait NdArray <T>
écrire ( DataBuffer <T> src)
Écrivez le contenu de ce tableau à N dimensions à partir du tampon source.

Méthodes héritées

Méthodes publiques

public abstrait NdArray <T> copyTo ( NdArray <T> dst)

Copiez le contenu de ce tableau dans le tableau de destination.

Le shape() du tableau de destination doit être égal à la forme de ce tableau, sinon une exception est levée. Après la copie, le contenu des deux tableaux peut être modifié indépendamment, sans s'affecter mutuellement.

Paramètres
heure d'été tableau pour recevoir une copie du contenu de ce tableau
Retours
  • ce tableau
Jetés
IllegalArgumentException si la forme de dst n'est pas égale à la forme de ce tableau

public abstrait NdArraySequence <? étend les éléments NdArray <T>> (int dimensionIdx)

Renvoie une séquence de tous les éléments à une dimension donnée.

Logiquement, le tableau à N dimensions peut être aplati en un seul vecteur, où les scalaires du (n - 1) ème élément précèdent ceux du (n) ème élément, pour un total de valeurs size() .

Par exemple, étant donné une matrice nxm sur les axes [x, y] , les éléments sont itérés dans l'ordre suivant :

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

La séquence renvoyée peut ensuite être itérée pour visiter chaque élément, soit en appelant forEach(Consumer) ou 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);
    });
 }

Paramètres
dimensionIdx indice de la dimension
Retours
  • une séquence NdArray
Jetés
IllegalArgumentException si dimensionIdx est supérieur ou égal au nombre total de dimensions de ce tableau

public abstrait booléen égal (Objet obj)

Vérifie l'égalité entre les tableaux à n dimensions.

Un tableau est égal à un autre objet si cet objet est un autre NdArray de même forme, type et que les éléments sont égaux et dans le même ordre. Par exemple:

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
 }

Notez que le calcul nécessaire pour vérifier l'égalité entre deux tableaux peut être coûteux dans certains cas et par conséquent, il est recommandé de ne pas utiliser cette méthode dans un chemin critique où les performances comptent.

Paramètres
obj objet avec lequel comparer ce tableau
Retours
  • vrai si ce tableau est égal à l'objet fourni

public abstract NdArray <T> get (coordonnées longues...)

Renvoie l'élément à N dimensions de ce tableau aux coordonnées données.

Des éléments de n’importe quelle dimension de ce tableau peuvent être récupérés. Par exemple, si le nombre de coordonnées est égal au nombre de dimensions de ce tableau, alors un tableau de rang 0 (scalaire) est renvoyé, dont la valeur peut ensuite être obtenue en appelant « array.getObject() ».

Toute modification appliquée aux éléments renvoyés affecte également les données de ce tableau, car aucune copie n'est impliquée.

Notez que l'invocation de cette méthode est un moyen équivalent et plus efficace de découper ce tableau sur un seul scalaire, c'est-à-dire que array.get(x, y, z) est égal à array.slice(at(x), at(y), at(z))

Paramètres
coordonnées coordonnées de l'élément auquel accéder, aucun ne renverra ce tableau
Retours
  • l'élément à cet index
Jetés
IndexOutOfBoundsException si certaines coordonnées sont hors des limites de leur dimension respective

public abstract T getObject (coordonnées longues...)

Renvoie la valeur du scalaire trouvé aux coordonnées données.

Pour accéder à l'élément scalaire, le nombre de coordonnées fournies doit être égal au nombre de dimensions de ce tableau (c'est à dire son rang). Par exemple:

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
 
Remarque : si ce tableau stocke des valeurs d'un type primitif, préférez l'utilisation de la méthode spécialisée dans la sous-classe pour ce type. Par exemple, floatArray.getFloat(0); .

Paramètres
coordonnées coordonnées du scalaire à résoudre
Retours
  • valeur de ce scalaire
Jetés
IndexOutOfBoundsException si certaines coordonnées sont hors des limites de leur dimension respective
IllégalRankException si le nombre de coordonnées n'est pas suffisant pour accéder à un élément scalaire

public abstrait NdArray <T> lecture ( DataBuffer <T> dst)

Lisez le contenu de ce tableau à N dimensions dans le tampon de destination.

La taille du tampon doit être égale ou supérieure à la size() de ce tableau, sinon une exception est levée. Après la copie, le contenu du buffer et du tableau peut être modifié indépendamment, sans s'affecter mutuellement.

Paramètres
heure d'été le tampon de destination
Retours
  • ce tableau
Jetés
BufferOverflowException si le tampon ne peut pas contenir le contenu de ce tableau
Voir aussi

public abstrait NdArraySequence <? étend les scalaires NdArray <T>> ()

Renvoie une séquence de tous les scalaires de ce tableau.

Cela équivaut à appeler elements(shape().numDimensions() - 1)

Retours
  • une séquence NdArray

public abstract NdArray <T> set ( NdArray <T> src, coordonnées longues...)

Attribue la valeur de l'élément à N dimensions trouvé aux coordonnées données.

Le nombre de coordonnées fournies peut être compris entre 0 et le rang - 1. Par exemple :

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
 

Paramètres
src un tableau des valeurs à attribuer
coordonnées coordonnées de l'élément à affecter
Retours
  • ce tableau
Jetés
IndexOutOfBoundsException si certaines coordonnées sont hors des limites de leur dimension respective

public abstract NdArray <T> setObject (valeur T, coordonnées longues...)

Attribue la valeur du scalaire trouvé aux coordonnées données.

Pour accéder à l'élément scalaire, le nombre de coordonnées fournies doit être égal au nombre de dimensions de ce tableau (c'est à dire son rang). Par exemple:

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
 
Remarque : si ce tableau stocke des valeurs d'un type primitif, préférez l'utilisation de la méthode spécialisée dans la sous-classe pour ce type. Par exemple, floatArray.setFloat(10.0f, 0);

Paramètres
valeur la valeur à attribuer
coordonnées coordonnées du scalaire à attribuer
Retours
  • ce tableau
Jetés
IndexOutOfBoundsException si certaines coordonnées sont hors des limites de leur dimension respective
IllégalRankException si le nombre de coordonnées n'est pas suffisant pour accéder à un élément scalaire

tranche publique abstraite NdArray <T> ( Index... indices)

Crée une vue (ou tranche) multidimensionnelle de ce tableau en mappant une ou plusieurs dimensions aux sélecteurs d'index donnés.

Les tranches permettent de parcourir un tableau à N dimensions dans n'importe lequel de ses axes et/ou de filtrer uniquement les éléments d'intérêt. Par exemple, pour une matrice donnée sur les axes [x, y] , il est possible d'itérer les éléments à y=0 pour tous x .

Toute modification appliquée à la tranche renvoyée affecte également les données de ce tableau, car aucune copie n'est impliquée.

Exemple d'utilisation :

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

Paramètres
indices sélecteurs d'index par dimensions, à partir de la dimension 0 de ce tableau.
Retours
  • l'élément résultant de la sélection de l'index
Jetés
IndexOutOfBoundsException si certaines coordonnées sont hors des limites de leur dimension respective

public abstrait NdArray <T> écriture ( DataBuffer <T> src)

Écrivez le contenu de ce tableau à N dimensions à partir du tampon source.

La taille du tampon doit être égale ou supérieure à la size() de ce tableau, sinon une exception est levée. Après la copie, le contenu du buffer et du tableau peut être modifié indépendamment, sans s'affecter mutuellement.

Paramètres
src le tampon source
Retours
  • ce tableau
Jetés
BufferUnderflowException si le tampon n'a pas suffisamment de données restantes pour écrire dans ce tableau
Voir aussi