NdArray

genel arayüz NdArray
Bilinen Dolaylı Alt Sınıflar

N boyutlu bir veri yapısı.

'NdArray' arayüzü, doğrusal veya bölümlere ayrılmış bir veri kaydının fiziksel olarak depolanması ile mantıksal gösterimi arasında bir soyutlama oluşturur. Genel olarak, bellekteki doğrusal veri bölümlerini doğrudan eşleyerek Java'daki standart çok boyutlu dizilerden daha iyi performans elde ederler.

DataBuffer gibi NdArray örnekleri de 64 bit dizin oluşturmayı destekler, böylece çok büyük veri kayıtlarını eşlemek için kullanılabilirler. Ayrıca değerlerinin herhangi bir yönde hareket etmesine veya yalnızca bir alt kümesinin seçilmesine olanak tanıyan özel koordinatları da desteklerler.

Kullanım örneği:

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

Genel Yöntemler

soyut NdArray <T>
copyTo ( NdArray <T> dst)
Bu dizinin içeriğini hedef diziye kopyalayın.
soyut NdArraySequence <? NdArray'i genişletir <T>>
öğeler (int sizeIdx)
Belirli bir boyuttaki tüm öğelerin sırasını döndürür.
soyut boole
eşittir (Nesne nesnesi)
N boyutlu diziler arasındaki eşitliği kontrol eder.
soyut NdArray <T>
get (uzun... koordinatlar)
Verilen koordinatlarda bu dizinin N boyutlu öğesini döndürür.
soyut T
getObject (uzun... koordinatlar)
Verilen koordinatlarda bulunan skalerin değerini döndürür.
soyut NdArray <T>
oku ( DataBuffer <T> dst)
Bu N boyutlu dizinin içeriğini hedef ara belleğe okuyun.
soyut NdArraySequence <? NdArray'i genişletir <T>>
skalerler ()
Bu dizideki tüm skalerlerin sırasını döndürür.
soyut NdArray <T>
set ( NdArray <T> src, long... koordinatlar)
Verilen koordinatlarda bulunan N boyutlu öğenin değerini atar.
soyut NdArray <T>
setObject (T değeri, uzun... koordinatlar)
Verilen koordinatlarda bulunan skalerin değerini atar.
soyut NdArray <T>
dilim ( İndeks... indeksler)
Bir veya daha fazla boyutu verilen dizin seçicilerle eşleyerek bu dizinin çok boyutlu bir görünümünü (veya dilimini) oluşturur.
soyut NdArray <T>
yaz ( DataBuffer <T> kaynak)
Bu N boyutlu dizinin içeriğini kaynak arabelleğinden yazın.

Kalıtsal Yöntemler

Genel Yöntemler

genel özet NdArray <T> copyTo ( NdArray <T> dst)

Bu dizinin içeriğini hedef diziye kopyalayın.

Hedef dizinin shape() bu dizinin şekline eşit olmalıdır, aksi takdirde bir istisna atılır. Kopyalamanın ardından her iki dizinin içeriği birbirini etkilemeden bağımsız olarak değiştirilebilir.

Parametreler
dst bu dizinin içeriğinin bir kopyasını alacak dizi
İade
  • bu dizi
Atar
YasadışıTartışmaİstisna dst şekli bu dizinin şekline eşit değilse

genel özet NdArraySequence <? NdArray <T>> öğelerini genişletir (int sizeIdx)

Belirli bir boyuttaki tüm öğelerin sırasını döndürür.

Mantıksal olarak, N boyutlu dizi, toplam size() değerleri için (n - 1) 'inci elemanın skalerlerinin (n) 'inci elemanın skalerlerinden önce geldiği tek bir vektörde düzleştirilebilir.

Örneğin, [x, y] eksenlerinde bir nxm matrisi verildiğinde, öğeler aşağıdaki sırayla yinelenir:

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

Döndürülen dizi daha sonra forEach(Consumer) veya forEachIndexed(BiConsumer) çağrılarak her bir öğeyi ziyaret etmek için yinelenebilir.

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

Parametreler
boyutIdx boyut indeksi
İade
  • bir NdArray dizisi
Atar
YasadışıTartışmaİstisna dimensionIdx bu dizinin toplam boyut sayısından büyük veya ona eşitse

genel soyut boole eşittir (Object obj)

N boyutlu diziler arasındaki eşitliği kontrol eder.

Bir dizi, başka bir nesneye eşitse, bu nesne aynı şekil, türde başka bir NdArray ise ve öğeler eşit ve aynı sıradaysa. Örneğin:

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
 }

İki dizi arasındaki eşitliği doğrulamak için gereken hesaplamanın bazı durumlarda pahalı olabileceğini ve bu nedenle performansın önemli olduğu kritik bir yolda bu yöntemin kullanılmaması önerildiğini unutmayın.

Parametreler
obj bu diziyi karşılaştıracak nesne
İade
  • true bu dizi sağlanan nesneye eşitse

genel özet NdArray <T> get (uzun... koordinatlar)

Verilen koordinatlarda bu dizinin N boyutlu öğesini döndürür.

Bu dizinin herhangi bir boyutunun elemanları alınabilir. Örneğin, koordinat sayısı bu dizinin boyut sayısına eşitse, bu durumda sıra-0 (skaler) bir dizi döndürülür ve bu değer daha sonra 'array.getObject()' çağrılarak elde edilebilir.

Döndürülen öğelere uygulanan herhangi bir değişiklik, herhangi bir kopya olmadığından bu dizinin verilerini de etkiler.

Bu yöntemi çağırmanın, bu diziyi tek bir skalere göre dilimlemenin eşdeğer ve daha etkili bir yolu olduğunu unutmayın; yani array.get(x, y, z) array.slice(at(x), at(y), at(z)) değerine eşittir. array.slice(at(x), at(y), at(z))

Parametreler
koordinatlar erişilecek öğenin koordinatları, hiçbiri bu diziyi döndürmez
İade
  • bu indeksteki eleman
Atar
IndexOutOfBoundsException bazı koordinatlar ilgili boyutların sınırlarının dışındaysa

genel özet T getObject (uzun... koordinatlar)

Verilen koordinatlarda bulunan skalerin değerini döndürür.

Skaler öğeye erişmek için sağlanan koordinatların sayısı bu dizinin boyut sayısına (yani sırasına) eşit olmalıdır. Örneğin:

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
 
Not: Bu dizi ilkel türden değerleri saklıyorsa, o tür için alt sınıfta özel yöntemin kullanımını tercih edin. Örneğin, floatArray.getFloat(0); .

Parametreler
koordinatlar çözülecek skalerin koordinatları
İade
  • bu skalerin değeri
Atar
IndexOutOfBoundsException bazı koordinatlar ilgili boyutların sınırlarının dışındaysa
Yasadışı Sıra İstisnası skaler bir öğeye erişmek için koordinat sayısı yeterli değilse

genel özet NdArray <T> okuma ( DataBuffer <T> dst)

Bu N boyutlu dizinin içeriğini hedef ara belleğe okuyun.

Tamponun boyutu bu dizinin size size() eşit veya daha büyük olmalıdır, aksi takdirde bir istisna atılır. Kopyalamanın ardından ara belleğin ve dizinin içeriği, birbirini etkilemeden bağımsız olarak değiştirilebilir.

Parametreler
dst hedef arabellek
İade
  • bu dizi
Atar
BufferOverflowException arabellek bu dizinin içeriğini tutamazsa
Ayrıca Bakınız

genel özet NdArraySequence <? NdArray <T>> skalerlerini () genişletir

Bu dizideki tüm skalerlerin sırasını döndürür.

Bu elements(shape().numDimensions() - 1) çağrısına eşdeğerdir.

İade
  • bir NdArray dizisi

genel özet NdArray <T> seti ( NdArray <T> src, long... koordinatlar)

Verilen koordinatlarda bulunan N boyutlu öğenin değerini atar.

Sağlanan koordinatların sayısı 0 ile sıra - 1 arasında herhangi bir yerde olabilir. Örneğin:

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
 

Parametreler
kaynak atanacak değerlerin dizisi
koordinatlar atanacak elemanın koordinatları
İade
  • bu dizi
Atar
IndexOutOfBoundsException bazı koordinatlar ilgili boyutların sınırlarının dışındaysa

genel özet NdArray <T> setObject (T değeri, uzun... koordinatlar)

Verilen koordinatlarda bulunan skalerin değerini atar.

Skaler öğeye erişmek için sağlanan koordinatların sayısı bu dizinin boyut sayısına (yani sırasına) eşit olmalıdır. Örneğin:

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
 
Not: Bu dizi ilkel bir türün değerlerini saklıyorsa, o tür için alt sınıfta özel yöntemin kullanımını tercih edin. Örneğin, floatArray.setFloat(10.0f, 0);

Parametreler
değer atanacak değer
koordinatlar atanacak skalerin koordinatları
İade
  • bu dizi
Atar
IndexOutOfBoundsException bazı koordinatlar ilgili boyutların sınırlarının dışındaysa
Yasadışı Sıra İstisnası skaler bir öğeye erişmek için koordinat sayısı yeterli değilse

genel özet NdArray <T> dilimi ( Dizin... dizinleri)

Bir veya daha fazla boyutu verilen dizin seçicilerle eşleyerek bu dizinin çok boyutlu bir görünümünü (veya dilimini) oluşturur.

Dilimler, N boyutlu bir diziyi herhangi bir eksende hareket ettirmeye ve/veya yalnızca ilgilenilen öğeleri filtrelemeye olanak tanır. Örneğin, [x, y] eksenlerindeki belirli bir matris için, tüm x için y=0 noktasında yinelenen öğeler mümkündür.

Döndürülen dilime uygulanan herhangi bir değişiklik, herhangi bir kopya olmadığından bu dizinin verilerini de etkiler.

Kullanım örneği:

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

Parametreler
endeksler bu dizinin 0 boyutundan başlayarak boyut başına dizin seçiciler.
İade
  • indeks seçiminin sonucunda ortaya çıkan eleman
Atar
IndexOutOfBoundsException bazı koordinatlar ilgili boyutların sınırlarının dışındaysa

genel özet NdArray <T> yazma ( DataBuffer <T> src)

Bu N boyutlu dizinin içeriğini kaynak arabelleğinden yazın.

Tamponun boyutu bu dizinin size size() eşit veya daha büyük olmalıdır, aksi takdirde bir istisna atılır. Kopyalamanın ardından ara belleğin ve dizinin içeriği, birbirini etkilemeden bağımsız olarak değiştirilebilir.

Parametreler
kaynak kaynak arabelleği
İade
  • bu dizi
Atar
TamponUnderflowException arabellekte bu diziye yazmaya yetecek kadar veri kalmamışsa
Ayrıca Bakınız