NdArray

رابط عمومی NdArray
زیر کلاس های غیر مستقیم شناخته شده

ساختار داده ای از ابعاد N.

رابط «NdArray» یک انتزاع بین ذخیره فیزیکی یک رکورد داده، که می تواند خطی یا قطعه بندی شده باشد، و نمایش منطقی آن ایجاد می کند. به طور کلی، آنها عملکرد بهتری نسبت به آرایه های چند بعدی استاندارد در جاوا با نگاشت مستقیم بخش های داده خطی در حافظه دارند.

مانند DataBuffer ، نمونه های NdArray از نمایه سازی 64 بیتی پشتیبانی می کنند تا بتوان از آنها برای نقشه برداری رکوردهای داده بسیار بزرگ استفاده کرد. آنها همچنین از مختصات خاصی پشتیبانی می کنند که به آنها اجازه می دهد مقادیر آنها را در هر جهتی عبور دهند یا فقط زیر مجموعه ای از آنها را انتخاب کنند.

مثال استفاده:

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

روش های عمومی

انتزاعی NdArray <T>
copyTo ( NdArray <T> dst)
محتوای این آرایه را در آرایه مقصد کپی کنید.
انتزاعی NdArraySequence <? NdArray <T>> را گسترش می دهد
عناصر (int dimensionIdx)
دنباله ای از همه عناصر را در یک بعد معین برمی گرداند.
بولی انتزاعی
برابر است (object obj)
برابری بین آرایه های n بعدی را بررسی می کند.
انتزاعی NdArray <T>
دریافت (طولانی... مختصات)
عنصر N بعدی این آرایه را در مختصات داده شده برمی گرداند.
چکیده تی
getObject (مختصات طولانی...)
مقدار اسکالر موجود در مختصات داده شده را برمی‌گرداند.
انتزاعی NdArray <T>
خواندن ( DataBuffer <T> dst)
محتوای این آرایه N بعدی را در بافر مقصد بخوانید.
انتزاعی NdArraySequence <? NdArray <T>> را گسترش می دهد
اسکالر ()
دنباله ای از تمام اسکالرها در این آرایه را برمی گرداند.
انتزاعی NdArray <T>
مجموعه ( NdArray <T> src، طولانی... مختصات)
مقدار عنصر N بعدی موجود در مختصات داده شده را تعیین می کند.
انتزاعی NdArray <T>
setObject (مقدار T، مختصات طولانی...)
مقدار اسکالر موجود در مختصات داده شده را تعیین می کند.
انتزاعی NdArray <T>
برش ( شاخص ... شاخص)
یک نمای چند بعدی (یا برش) از این آرایه با نگاشت یک یا چند بعد به انتخابگرهای شاخص داده شده ایجاد می کند.
انتزاعی NdArray <T>
نوشتن ( DataBuffer <T> src)
محتوای این آرایه N بعدی را از بافر منبع بنویسید.

روش های ارثی

روش های عمومی

چکیده عمومی NdArray <T> copyTo ( NdArray <T> dst)

محتوای این آرایه را در آرایه مقصد کپی کنید.

shape() آرایه مقصد باید با شکل این آرایه برابر باشد، در غیر این صورت استثنا ایجاد می شود. پس از کپی، محتوای هر دو آرایه را می توان به طور مستقل تغییر داد، بدون اینکه بر یکدیگر تأثیر بگذارند.

پارامترها
dst آرایه برای دریافت یک کپی از محتوای این آرایه
برمی گرداند
  • این آرایه
پرتاب می کند
IllegalArgumentException اگر شکل dst با شکل این آرایه برابر نباشد

چکیده عمومی NdArraySequence <? عناصر NdArray <T>> را گسترش می دهد (int dimensionIdx)

دنباله ای از همه عناصر را در یک بعد معین برمی گرداند.

به طور منطقی، آرایه بعدی N را می توان در یک بردار واحد مسطح کرد، جایی که اسکالرهای عنصر (n - 1) قبل از عنصر (n) ام، برای کل مقادیر size() می گیرند.

برای مثال، با توجه به یک ماتریس nxm روی محورهای [x, y] ، عناصر به ترتیب زیر تکرار می‌شوند:

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

سپس می‌توان دنباله برگشتی را برای بازدید از هر عنصر، با فراخوانی forEach(Consumer) یا 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);
    });
 }

پارامترها
dimensionIdx شاخص بعد
برمی گرداند
  • یک دنباله NdArray
پرتاب می کند
IllegalArgumentException اگر dimensionIdx بزرگتر یا مساوی تعداد کل ابعاد این آرایه باشد

بولین انتزاعی عمومی برابر است (object obj)

برابری بین آرایه های n بعدی را بررسی می کند.

یک آرایه با شی دیگری برابر است اگر این شی NdArray دیگری با همان شکل، نوع و عناصر برابر و به یک ترتیب باشند. به عنوان مثال:

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
 }

توجه داشته باشید که محاسبات مورد نیاز برای تأیید برابری بین دو آرایه در برخی موارد می‌تواند گران باشد و بنابراین، توصیه می‌شود از این روش در مسیر بحرانی که عملکردها اهمیت دارند استفاده نکنید.

پارامترها
obj شی برای مقایسه این آرایه با
برمی گرداند
  • درست است اگر این آرایه برابر با شی ارائه شده باشد

انتزاع عمومی NdArray <T> دریافت (مختصات طولانی...)

عنصر N بعدی این آرایه را در مختصات داده شده برمی گرداند.

عناصر هر یک از ابعاد این آرایه قابل بازیابی هستند. به عنوان مثال، اگر تعداد مختصات برابر با تعداد ابعاد این آرایه باشد، یک آرایه رتبه-0 (اسکالر) برگردانده می شود که با فراخوانی «array.getObject()» مقدار آن را می توان به دست آورد.

هر تغییری که در عناصر برگشتی اعمال شود، داده های این آرایه را نیز تحت تأثیر قرار می دهد، زیرا هیچ کپی در کار نیست.

توجه داشته باشید که فراخوانی این روش روشی معادل و کارآمدتر برای برش این آرایه بر روی یک اسکالر است، یعنی array.get(x, y, z) برابر است با array.slice(at(x), at(y), at(z))

پارامترها
مختصات مختصات عنصر برای دسترسی، هیچ یک این آرایه را بر نمی گرداند
برمی گرداند
  • عنصر موجود در این شاخص
پرتاب می کند
IndexOutOfBoundsException اگر برخی از مختصات خارج از محدوده بعد مربوطه خود باشند

انتزاع عمومی T getObject (مختصات طولانی...)

مقدار اسکالر موجود در مختصات داده شده را برمی‌گرداند.

برای دسترسی به عنصر اسکالر، تعداد مختصات ارائه شده باید با تعداد ابعاد این آرایه (یعنی رتبه آن) برابر باشد. به عنوان مثال:

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
 
توجه: اگر این آرایه مقادیری از نوع اولیه را ذخیره می کند، استفاده از روش تخصصی را در زیر کلاس برای آن نوع ترجیح دهید. برای مثال floatArray.getFloat(0); .

پارامترها
مختصات مختصات اسکالر برای حل کردن
برمی گرداند
  • ارزش آن اسکالر
پرتاب می کند
IndexOutOfBoundsException اگر برخی از مختصات خارج از محدوده بعد مربوطه خود باشند
IllegalRankException اگر تعداد مختصات برای دسترسی به یک عنصر اسکالر کافی نباشد

چکیده عمومی NdArray <T> خوانده شده ( DataBuffer <T> dst)

محتوای این آرایه N بعدی را در بافر مقصد بخوانید.

اندازه بافر باید برابر یا بزرگتر از size() این آرایه باشد، در غیر این صورت یک استثنا ایجاد می شود. پس از کپی، محتوای بافر و آرایه را می توان به طور مستقل تغییر داد، بدون اینکه بر یکدیگر تأثیر بگذارند.

پارامترها
dst بافر مقصد
برمی گرداند
  • این آرایه
پرتاب می کند
BufferOverflowException اگر بافر نتواند محتوای این آرایه را نگه دارد
همچنین ببینید

چکیده عمومی NdArraySequence <? اسکالرهای NdArray <T>> را گسترش می دهد ()

دنباله ای از تمام اسکالرها در این آرایه را برمی گرداند.

این معادل فراخوانی elements(shape().numDimensions() - 1)

برمی گرداند
  • یک دنباله NdArray

مجموعه انتزاعی عمومی NdArray <T> ( NdArray <T> src، long... مختصات)

مقدار عنصر N بعدی موجود در مختصات داده شده را تعیین می کند.

تعداد مختصات ارائه شده می تواند بین 0 و رتبه - 1 باشد. به عنوان مثال:

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
 

پارامترها
src آرایه ای از مقادیر برای تخصیص
مختصات مختصات عنصر برای تخصیص
برمی گرداند
  • این آرایه
پرتاب می کند
IndexOutOfBoundsException اگر برخی از مختصات خارج از محدوده بعد مربوطه خود باشند

انتزاع عمومی NdArray <T> setObject (مقدار T، طولانی... مختصات)

مقدار اسکالر موجود در مختصات داده شده را تعیین می کند.

برای دسترسی به عنصر اسکالر، تعداد مختصات ارائه شده باید با تعداد ابعاد این آرایه (یعنی رتبه آن) برابر باشد. به عنوان مثال:

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
 
توجه: اگر این آرایه مقادیری از نوع اولیه را ذخیره می کند، استفاده از روش تخصصی را در زیر کلاس برای آن نوع ترجیح دهید. برای مثال floatArray.setFloat(10.0f, 0);

پارامترها
ارزش مقدار برای تخصیص
مختصات مختصات اسکالر برای تخصیص
برمی گرداند
  • این آرایه
پرتاب می کند
IndexOutOfBoundsException اگر برخی از مختصات خارج از محدوده بعد مربوطه خود باشند
IllegalRankException اگر تعداد مختصات برای دسترسی به یک عنصر اسکالر کافی نباشد

چکیده عمومی NdArray <T> برش ( شاخص ... شاخص)

یک نمای چند بعدی (یا برش) از این آرایه با نگاشت یک یا چند بعد به انتخابگرهای شاخص داده شده ایجاد می کند.

برش ها امکان عبور از یک آرایه N-بعدی را در هر یک از محورهای آن و/یا فیلتر کردن فقط عناصر مورد علاقه را فراهم می کنند. به عنوان مثال، برای یک ماتریس معین روی محورهای [x, y] ، می توان عناصر را در y=0 برای همه x تکرار کرد.

هر گونه تغییر اعمال شده در برش برگشتی، داده های این آرایه را نیز تحت تأثیر قرار می دهد، زیرا هیچ کپی در کار نیست.

مثال استفاده:

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

پارامترها
شاخص ها انتخابگرهای شاخص در هر ابعاد، از بعد 0 این آرایه شروع می شود.
برمی گرداند
  • عنصر حاصل از انتخاب شاخص
پرتاب می کند
IndexOutOfBoundsException اگر برخی از مختصات خارج از محدوده بعد مربوطه خود باشند

انتزاع عمومی NdArray <T> نوشتن ( DataBuffer <T> src)

محتوای این آرایه N بعدی را از بافر منبع بنویسید.

اندازه بافر باید برابر یا بزرگتر از size() این آرایه باشد، در غیر این صورت یک استثنا ایجاد می شود. پس از کپی، محتوای بافر و آرایه را می توان به طور مستقل تغییر داد، بدون اینکه بر یکدیگر تأثیر بگذارند.

پارامترها
src بافر منبع
برمی گرداند
  • این آرایه
پرتاب می کند
BufferUnderflowException اگر بافر اطلاعات کافی برای نوشتن در این آرایه نداشته باشد
همچنین ببینید