NdArray

الواجهة العامة NdArray
الفئات الفرعية غير المباشرة المعروفة

بنية بيانات للأبعاد N.

تقوم واجهة "NdArray" بإنشاء تجريد بين التخزين الفعلي لسجل البيانات، والذي يمكن أن يكون خطيًا أو مجزأً، وتمثيله المنطقي. بشكل عام، فإنها تحقق أداءً أفضل من المصفوفات القياسية متعددة الأبعاد في Java عن طريق تعيين مقاطع البيانات الخطية مباشرة في الذاكرة.

مثل 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>
كوبي تو ( NdArray <T> dst)
انسخ محتوى هذه المصفوفة إلى المصفوفة الوجهة.
مجردة NdArraySequence <؟ يمتد NdArray <T>>
العناصر (int DimensionIdx)
إرجاع تسلسل لجميع العناصر في بعد معين.
منطقية مجردة
يساوي (كائن كائن)
التحقق من المساواة بين المصفوفات ذات الأبعاد n.
ملخص NdArray <T>
الحصول على (طويلة... الإحداثيات)
تُرجع العنصر N-الأبعاد لهذه المصفوفة عند الإحداثيات المحددة.
مجردة T
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() مساوياً لشكل هذه المصفوفة، وإلا فسيتم طرح استثناء. بعد النسخ، يمكن تغيير محتوى كلا المصفوفتين بشكل مستقل، دون التأثير على بعضهما البعض.

حدود
التوقيت الصيفي array لتلقي نسخة من محتوى هذه المصفوفة
عائدات
  • هذه المصفوفة
رميات
غير الشرعيين استثناء حجة إذا كان شكل dst لا يساوي شكل هذه المصفوفة

الملخص العام NdArraySequence <? يمتد عناصر NdArray <T>> (int DimensionIdx)

إرجاع تسلسل لجميع العناصر في بعد معين.

منطقيًا، يمكن تسوية المصفوفة ذات الأبعاد N في متجه واحد، حيث تسبق الكميات القياسية للعنصر (n - 1) تلك الخاصة بالعنصر (n) ، لإجمالي قيم size() .

على سبيل المثال، في حالة وجود مصفوفة nxm على المحاور [x, y] ، يتم تكرار العناصر بالترتيب التالي:

س 0 ص 0 , س 0 ص 1 , ..., س 0 ص م-1 , س 1 ذ 0 , س 1 ذ 1 , ..., س ن-1 ص م-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
رميات
غير الشرعيين استثناء حجة إذا كان 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() هذا المصفوفة، أو سيتم طرح استثناء. بعد النسخ، يمكن تغيير محتوى المخزن المؤقت والمصفوفة بشكل مستقل، دون التأثير على بعضهما البعض.

حدود
التوقيت الصيفي المخزن المؤقت الوجهة
عائدات
  • هذه المصفوفة
رميات
BufferOverflowException إذا كان المخزن المؤقت لا يمكنه الاحتفاظ بمحتوى هذه المصفوفة
أنظر أيضا

الملخص العام NdArraySequence <? يمتد NdArray <T>> العددية ()

إرجاع تسلسل لجميع الكميات الموجودة في هذه المصفوفة.

وهذا يعادل استدعاء elements(shape().numDimensions() - 1)

عائدات
  • تسلسل NdArray

مجموعة NdArray <T> مجردة عامة ( NdArray <T> src، إحداثيات طويلة ...)

يعين قيمة العنصر 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 إذا لم يكن لدى المخزن المؤقت ما يكفي من البيانات المتبقية للكتابة في هذه المصفوفة
أنظر أيضا