Subclases indirectas conocidas AbstractDenseNdArray <T, U extiende NdArray <T>>, AbstractNdArray <T, U extiende NdArray <T>>, BooleanDenseNdArray , BooleanNdArray , ByteDenseNdArray , ByteNdArray , DenseNdArray <T>, DoubleDenseNdArray , DoubleNdArray , FloatDenseNdArray , FloatNdArray , tDenseNdArray , IntNdArray , LongDenseNdArray , LongNdArray y 11 personas más. |
Una estructura de datos de N dimensiones.
La interfaz `NdArray` crea una abstracción entre el almacenamiento físico de un registro de datos, que puede ser lineal o segmentado, y su representación lógica. En general, logran mejores rendimientos que las matrices multidimensionales estándar en Java al mapear directamente segmentos de datos lineales en la memoria.
Al igual que DataBuffer
, las instancias NdArray
admiten indexación de 64 bits, por lo que pueden usarse para mapear registros de datos muy grandes. También admiten coordenadas especiales que permiten recorrer sus valores en cualquier dirección o seleccionar solo un subconjunto de ellos.
Ejemplo de uso:
// 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étodos públicos
resumen NdArray <T> | |
resumen NdArraySequence <? extiende NdArray <T>> | elementos (int dimensiónIdx) Devuelve una secuencia de todos los elementos en una dimensión determinada. |
booleano abstracto | es igual (Objeto obj) Comprueba la igualdad entre matrices de n dimensiones. |
resumen NdArray <T> | obtener (coordenadas largas...) Devuelve el elemento N-dimensional de esta matriz en las coordenadas dadas. |
resumen T | getObject (coordenadas largas...) Devuelve el valor del escalar encontrado en las coordenadas dadas. |
resumen NdArray <T> | leer ( Buffer de datos <T> horario de verano) Lea el contenido de esta matriz N-dimensional en el búfer de destino. |
resumen NdArraySequence <? extiende NdArray <T>> | escalares () Devuelve una secuencia de todos los escalares de esta matriz. |
resumen NdArray <T> | |
resumen NdArray <T> | setObject (valor T, coordenadas largas...) Asigna el valor del escalar encontrado en las coordenadas dadas. |
resumen NdArray <T> | |
resumen NdArray <T> | escribir ( DataBuffer <T> src) Escriba el contenido de esta matriz N-dimensional desde el búfer de origen. |
Métodos heredados
Métodos públicos
resumen público NdArray <T> copyTo ( NdArray <T> dst)
Copie el contenido de esta matriz a la matriz de destino.
La shape()
de la matriz de destino debe ser igual a la forma de esta matriz o se generará una excepción. Después de la copia, el contenido de ambos arrays se puede alterar de forma independiente, sin afectarse entre sí.
Parámetros
horario de verano | array para recibir una copia del contenido de este array |
---|
Devoluciones
- esta matriz
Lanza
Excepción de argumento ilegal | si la forma de dst no es igual a la forma de esta matriz |
---|
resumen público NdArraySequence <? extiende elementos NdArray <T>> (int dimensionIdx)
Devuelve una secuencia de todos los elementos en una dimensión determinada.
Lógicamente, la matriz N-dimensional se puede aplanar en un solo vector, donde los escalares del (n - 1)
ésimo elemento preceden a los del (n)
ésimo elemento, para un total de valores de size()
.
Por ejemplo, dada una matriz nxm
en los ejes [x, y]
, los elementos se iteran en el siguiente orden:
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
Luego, la secuencia devuelta se puede iterar para visitar cada elemento, ya sea llamando forEach(Consumer)
o 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);
});
}
Parámetros
dimensiónIdx | índice de la dimensión |
---|
Devoluciones
- una secuencia
NdArray
Lanza
Excepción de argumento ilegal | si dimensionIdx es mayor o igual al número total de dimensiones de esta matriz |
---|
booleano abstracto público es igual (Objeto obj)
Comprueba la igualdad entre matrices de n dimensiones.
Una matriz es igual a otro objeto si este objeto es otro NdArray
de la misma forma, tipo y los elementos son iguales y están en el mismo orden. Por ejemplo:
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
}
Tenga en cuenta que el cálculo necesario para verificar la igualdad entre dos matrices puede ser costoso en algunos casos y, por lo tanto, se recomienda no utilizar este método en una ruta crítica donde el rendimiento importa.
Parámetros
objeto | objeto para comparar esta matriz con |
---|
Devoluciones
- verdadero si esta matriz es igual al objeto proporcionado
resumen público NdArray <T> get (coordenadas largas...)
Devuelve el elemento N-dimensional de esta matriz en las coordenadas dadas.
Se pueden recuperar elementos de cualquiera de las dimensiones de esta matriz. Por ejemplo, si el número de coordenadas es igual al número de dimensiones de esta matriz, entonces se devuelve una matriz de rango 0 (escalar), cuyo valor se puede obtener llamando a `array.getObject()`.
Cualquier cambio aplicado a los elementos devueltos también afecta a los datos de esta matriz, ya que no hay ninguna copia involucrada.
Tenga en cuenta que invocar este método es una forma equivalente y más eficiente de dividir esta matriz en un solo escalar, es decir, array.get(x, y, z)
es igual a array.slice(at(x), at(y), at(z))
Parámetros
coordenadas | coordenadas del elemento a acceder, ninguno devolverá esta matriz |
---|
Devoluciones
- el elemento en este índice
Lanza
Excepción IndexOutOfBounds | si algunas coordenadas están fuera de los límites de su dimensión respectiva |
---|
resumen público T getObject (coordenadas largas...)
Devuelve el valor del escalar encontrado en las coordenadas dadas.
Para acceder al elemento escalar, el número de coordenadas proporcionadas debe ser igual al número de dimensiones de esta matriz (es decir, su rango). Por ejemplo:
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
Nota: si esta matriz almacena valores de un tipo primitivo, prefiera el uso del método especializado en la subclase para ese tipo. Por ejemplo, floatArray.getFloat(0);
. Parámetros
coordenadas | coordenadas del escalar para resolver |
---|
Devoluciones
- valor de ese escalar
Lanza
Excepción IndexOutOfBounds | si algunas coordenadas están fuera de los límites de su dimensión respectiva |
---|---|
Excepción de rango ilegal | si el número de coordenadas no es suficiente para acceder a un elemento escalar |
resumen público NdArray <T> lectura ( DataBuffer <T> dst)
Lea el contenido de esta matriz N-dimensional en el búfer de destino.
El tamaño del búfer debe ser igual o mayor que el size()
de esta matriz, o se generará una excepción. Después de la copia, el contenido del buffer y del array se pueden modificar de forma independiente, sin afectarse entre sí.
Parámetros
horario de verano | el buffer de destino |
---|
Devoluciones
- esta matriz
Lanza
Excepción de desbordamiento de búfer | si el buffer no puede contener el contenido de esta matriz |
---|
Ver también
resumen público NdArraySequence <? extiende NdArray <T>> escalares ()
Devuelve una secuencia de todos los escalares de esta matriz.
Esto es equivalente a llamar elements(shape().numDimensions() - 1)
Devoluciones
- una secuencia
NdArray
conjunto NdArray <T> abstracto público ( NdArray <T> src, coordenadas largas...)
Asigna el valor del elemento N-dimensional encontrado en las coordenadas dadas.
El número de coordenadas proporcionadas puede estar entre 0 y el rango - 1. Por ejemplo:
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
Parámetros
src | una matriz de los valores a asignar |
---|---|
coordenadas | coordenadas del elemento a asignar |
Devoluciones
- esta matriz
Lanza
Excepción IndexOutOfBounds | si algunas coordenadas están fuera de los límites de su dimensión respectiva |
---|
resumen público NdArray <T> setObject (valor T, coordenadas largas...)
Asigna el valor del escalar encontrado en las coordenadas dadas.
Para acceder al elemento escalar, el número de coordenadas proporcionadas debe ser igual al número de dimensiones de esta matriz (es decir, su rango). Por ejemplo:
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
Nota: si esta matriz almacena valores de un tipo primitivo, prefiera el uso del método especializado en la subclase para ese tipo. Por ejemplo, floatArray.setFloat(10.0f, 0);
Parámetros
valor | el valor a asignar |
---|---|
coordenadas | coordenadas del escalar a asignar |
Devoluciones
- esta matriz
Lanza
Excepción IndexOutOfBounds | si algunas coordenadas están fuera de los límites de su dimensión respectiva |
---|---|
Excepción de rango ilegal | si el número de coordenadas no es suficiente para acceder a un elemento escalar |
resumen público NdArray <T> segmento ( Índice... índices)
Crea una vista (o segmento) multidimensional de esta matriz asignando una o más dimensiones a los selectores de índice dados.
Los cortes permiten recorrer una matriz N-dimensional en cualquiera de sus ejes y/o filtrar solo elementos de interés. Por ejemplo, para una matriz dada en los ejes [x, y]
, es posible iterar elementos en y=0
para todo x
.
Cualquier cambio aplicado al segmento devuelto también afecta los datos de esta matriz, ya que no hay ninguna copia involucrada.
Ejemplo de uso:
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
});
}
Parámetros
índices | selectores de índice por dimensiones, a partir de la dimensión 0 de esta matriz. |
---|
Devoluciones
- el elemento resultante de la selección del índice
Lanza
Excepción IndexOutOfBounds | si algunas coordenadas están fuera de los límites de su dimensión respectiva |
---|
escritura NdArray <T> abstracta pública ( DataBuffer <T> src)
Escriba el contenido de esta matriz N-dimensional desde el búfer de origen.
El tamaño del búfer debe ser igual o mayor que el size()
de esta matriz, o se generará una excepción. Después de la copia, el contenido del buffer y del array se pueden modificar de forma independiente, sin afectarse entre sí.
Parámetros
src | el buffer de origen |
---|
Devoluciones
- esta matriz
Lanza
Excepción de flujo de búfer | si el búfer no tiene suficientes datos restantes para escribir en esta matriz |
---|