Subclasses indiretas conhecidas AbstractDenseNdArray <T, U estende NdArray <T >>, AbstractNdArray <T, U estende NdArray <T >>, BooleanDenseNdArray , BooleanNdArray , ByteDenseNdArray , ByteNdArray , DenseNdArray <T>, DoubleDenseNdArray , DoubleNdArray , FloatDenseNdArray , FloatNdArray , IntDenseNdArray , IntNdArray , LongDenseNdArray , LongNdArray e 11 outros. |
Uma estrutura de dados de N dimensões.
A interface `NdArray` cria uma abstração entre o armazenamento físico de um registro de dados, que pode ser linear ou segmentado, e sua representação lógica. Em geral, eles alcançam melhores desempenhos do que os arrays multidimensionais padrão em Java mapeando segmentos de dados lineares diretamente na memória.
Como o DataBuffer
, NdArray
instâncias do NdArray
oferecem suporte à indexação de 64 bits, portanto, podem ser usadas para mapear registros de dados muito grandes. Eles também suportam coordenadas especiais que permitem percorrer seus valores em qualquer direção ou selecionar apenas um subconjunto deles.
Exemplo 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
abstrato NdArray <T> | |
abstract NdArraySequence <? estende NdArray <T>> | elementos (int dimensionIdx) Retorna uma sequência de todos os elementos em uma determinada dimensão. |
booleano abstrato | igual a (objeto obj) Verifica a igualdade entre matrizes n-dimensionais. |
abstrato NdArray <T> | obter (longas ... coordenadas) Retorna o elemento N-dimensional desta matriz nas coordenadas fornecidas. |
abstrato T | getObject (long ... coordinates) Retorna o valor do escalar encontrado nas coordenadas fornecidas. |
abstrato NdArray <T> | |
abstract NdArraySequence <? estende NdArray <T>> | escalares () Retorna uma sequência de todos os escalares nesta matriz. |
abstrato NdArray <T> | |
abstrato NdArray <T> | setObject (valor T, long ... coordenadas) Atribui o valor do escalar encontrado nas coordenadas fornecidas. |
abstrato NdArray <T> | fatia ( índice ... índices) Cria uma visualização multidimensional (ou fatia) dessa matriz mapeando uma ou mais dimensões para os seletores de índice fornecidos. |
abstrato NdArray <T> |
Métodos herdados
Métodos Públicos
public abstract NdArray <T> copyTo ( NdArray <T> dst)
Copie o conteúdo desta matriz para a matriz de destino.
A shape()
da matriz de destino deve ser igual à forma desta matriz, ou uma exceção é lançada. Após a cópia, o conteúdo de ambas as matrizes pode ser alterado de forma independente, sem afetar um ao outro.
Parâmetros
DST | array para receber uma cópia do conteúdo deste array |
---|
Devoluções
- esta matriz
Lança
Exceção de argumento ilegal | se a forma de dst não for igual à forma desta matriz |
---|
public abstract NdArraySequence <? estende NdArray <t >> elementos (int dimensionIdx)
Retorna uma sequência de todos os elementos em uma determinada dimensão.
Logicamente, a matriz N-dimensional pode ser achatada em um único vetor, onde os escalares do (n - 1)
elemento precede aqueles do (n)
elemento, para um total de valores de size()
.
Por exemplo, dada uma matriz nxm
nos eixos [x, y]
, os elementos são iterados na seguinte ordem:
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
A sequência retornada pode então ser iterada para visitar cada elemento, chamando 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);
});
}
Parâmetros
dimensionIdx | índice da dimensão |
---|
Devoluções
- uma sequência
NdArray
Lança
Exceção de argumento ilegal | se dimensionIdx for maior ou igual ao número total de dimensões desta matriz |
---|
public abstract boolean equals (Object obj)
Verifica a igualdade entre matrizes n-dimensionais.
Uma matriz é igual a outro objeto se este objeto for outro NdArray
da mesma forma, tipo e os elementos forem iguais e na mesma ordem. Por exemplo:
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
}
Observe que o cálculo necessário para verificar a igualdade entre duas matrizes pode ser caro em alguns casos e, portanto, é recomendado não usar esse método em um caminho crítico onde o desempenho é importante.
Parâmetros
obj | objeto para comparar esta matriz com |
---|
Devoluções
- verdadeiro se esta matriz for igual ao objeto fornecido
public abstract NdArray <T> get (long ... coordinates)
Retorna o elemento N-dimensional desta matriz nas coordenadas fornecidas.
Elementos de qualquer uma das dimensões desta matriz podem ser recuperados. Por exemplo, se o número de coordenadas é igual ao número de dimensões deste array, então um array de classificação 0 (escalar) é retornado, cujo valor pode então ser obtido chamando `array.getObject ()`.
Quaisquer alterações aplicadas aos elementos retornados afetam os dados desta matriz também, pois não há nenhuma cópia envolvida.
Observe que invocar este método é uma forma equivalente e mais eficiente de array.get(x, y, z)
este array em um escalar único, ou seja, array.get(x, y, z)
é igual a array.slice(at(x), at(y), at(z))
Parâmetros
coordenadas | coordenadas do elemento a acessar, nenhuma retornará esta matriz |
---|
Devoluções
- o elemento neste índice
Lança
IndexOutOfBoundsException | se algumas coordenadas estão fora dos limites de suas respectivas dimensões |
---|
public abstract T getObject (long ... coordinates)
Retorna o valor do escalar encontrado nas coordenadas fornecidas.
Para acessar o elemento escalar, o número de coordenadas fornecidas deve ser igual ao número de dimensões desta matriz (ou seja, sua classificação). Por exemplo:
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: se este array armazena valores de um tipo primitivo, prefira o uso do método especializado na subclasse desse tipo. Por exemplo, floatArray.getFloat(0);
. Parâmetros
coordenadas | coordenadas do escalar para resolver |
---|
Devoluções
- valor daquele escalar
Lança
IndexOutOfBoundsException | se algumas coordenadas estão fora dos limites de suas respectivas dimensões |
---|---|
IllegalRankException | se o número de coordenadas não for suficiente para acessar um elemento escalar |
public abstract NdArray <T> read ( DataBuffer <T> dst)
Leia o conteúdo deste array N-dimensional no buffer de destino.
O tamanho do buffer deve ser igual ou maior ao size()
desta matriz, ou uma exceção é lançada. Após a cópia, o conteúdo do buffer e do array podem ser alterados de forma independente, sem afetar um ao outro.
Parâmetros
DST | o buffer de destino |
---|
Devoluções
- esta matriz
Lança
BufferOverflowException | se o buffer não pode conter o conteúdo deste array |
---|
Veja também
public abstract NdArraySequence <? estende NdArray <T>> escalares ()
Retorna uma sequência de todos os escalares nesta matriz.
Isso é equivalente a chamar elements(shape().numDimensions() - 1)
Devoluções
- uma sequência
NdArray
public abstract NdArray <T> set ( NdArray <T> src, long ... coordinates)
Atribui o valor do elemento N-dimensional encontrado nas coordenadas fornecidas.
O número de coordenadas fornecidas pode estar em qualquer lugar entre 0 e classificação - 1. Por exemplo:
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 | uma matriz dos valores a serem atribuídos |
---|---|
coordenadas | coordenadas do elemento a atribuir |
Devoluções
- esta matriz
Lança
IndexOutOfBoundsException | se algumas coordenadas estão fora dos limites de suas respectivas dimensões |
---|
public abstract NdArray <T> setObject (valor T, long ... coordinates)
Atribui o valor do escalar encontrado nas coordenadas fornecidas.
Para acessar o elemento escalar, o número de coordenadas fornecidas deve ser igual ao número de dimensões desta matriz (ou seja, sua classificação). Por exemplo:
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: se este array armazena valores de um tipo primitivo, prefira o uso do método especializado na subclasse desse tipo. Por exemplo, floatArray.setFloat(10.0f, 0);
Parâmetros
valor | o valor a ser atribuído |
---|---|
coordenadas | coordenadas do escalar para atribuir |
Devoluções
- esta matriz
Lança
IndexOutOfBoundsException | se algumas coordenadas estão fora dos limites de suas respectivas dimensões |
---|---|
IllegalRankException | se o número de coordenadas não for suficiente para acessar um elemento escalar |
fatia public abstract NdArray <T> ( índice ... índices)
Cria uma visualização multidimensional (ou fatia) dessa matriz mapeando uma ou mais dimensões para os seletores de índice fornecidos.
As fatias permitem atravessar uma matriz N-dimensional em qualquer um de seus eixos e / ou filtrar apenas os elementos de interesse. Por exemplo, para uma determinada matriz nos eixos [x, y]
, é possível iterar os elementos em y=0
para todos os x
.
Quaisquer alterações aplicadas à fatia retornada afetam os dados dessa matriz também, pois não há nenhuma cópia envolvida.
Exemplo 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 | seletores de índice por dimensões, começando na dimensão 0 desta matriz. |
---|
Devoluções
- o elemento resultante da seleção do índice
Lança
IndexOutOfBoundsException | se algumas coordenadas estão fora dos limites de suas respectivas dimensões |
---|
public abstract NdArray <T> write ( DataBuffer <T> src)
Grave o conteúdo desta matriz N-dimensional do buffer de origem.
O tamanho do buffer deve ser igual ou maior ao size()
desta matriz, ou uma exceção é lançada. Após a cópia, o conteúdo do buffer e do array podem ser alterados de forma independente, sem afetar um ao outro.
Parâmetros
src | o buffer de origem |
---|
Devoluções
- esta matriz
Lança
BufferUnderflowException | se o buffer não tiver dados restantes suficientes para gravar neste array |
---|