الفئات الفرعية غير المباشرة المعروفة AbstractDenseNdArray <T، U يمتد NdArray <T>>، AbstractNdArray <T، U يمتد NdArray <T>>، BooleanDenseNdArray ، BooleanNdArray ، ByteDenseNdArray ، ByteNdArray ، DenseNdArray <T>، DoubleDenseNdArray ، DoubleNdArray ، FloatDenseNdArray ، FloatNdAr راي ، إنتدينسندأراي، إنتندأراي ، لونغدينسندأراي و LongNdArray و 11 آخرين. |
بنية بيانات للأبعاد 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> | |
مجردة NdArraySequence <؟ يمتد NdArray <T>> | العناصر (int DimensionIdx) إرجاع تسلسل لجميع العناصر في بعد معين. |
منطقية مجردة | يساوي (كائن كائن) التحقق من المساواة بين المصفوفات ذات الأبعاد n. |
ملخص NdArray <T> | الحصول على (طويلة... الإحداثيات) تُرجع العنصر N-الأبعاد لهذه المصفوفة عند الإحداثيات المحددة. |
مجردة T | getObject (إحداثيات طويلة) إرجاع قيمة العددية الموجودة في الإحداثيات المحددة. |
ملخص NdArray <T> | |
مجردة NdArraySequence <؟ يمتد NdArray <T>> | العددية () إرجاع تسلسل لجميع الكميات الموجودة في هذه المصفوفة. |
ملخص NdArray <T> | |
ملخص NdArray <T> | setObject (قيمة T، إحداثيات طويلة) يعين قيمة العددية الموجودة في الإحداثيات المحددة. |
ملخص NdArray <T> | |
ملخص NdArray <T> |
الطرق الموروثة
الأساليب العامة
الملخص العام NdArray <T> CopyTo ( NdArray <T> dst)
انسخ محتوى هذه المصفوفة إلى المصفوفة الوجهة.
يجب أن يكون shape()
مساوياً لشكل هذه المصفوفة، وإلا فسيتم طرح استثناء. بعد النسخ، يمكن تغيير محتوى كلا المصفوفتين بشكل مستقل، دون التأثير على بعضهما البعض.
حدود
التوقيت الصيفي | array لتلقي نسخة من محتوى هذه المصفوفة |
---|
المرتجعات
- هذه المصفوفة
رميات
IllegalArgumentException | إذا كان شكل 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
رميات
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()
هذا المصفوفة، أو سيتم طرح استثناء. بعد النسخ، يمكن تغيير محتوى المخزن المؤقت والمصفوفة بشكل مستقل، دون التأثير على بعضهما البعض.
حدود
التوقيت الصيفي | المخزن المؤقت الوجهة |
---|
المرتجعات
- هذه المصفوفة
رميات
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 | إذا لم يكن لدى المخزن المؤقت ما يكفي من البيانات المتبقية للكتابة في هذه المصفوفة |
---|