תת-מחלקות עקיפות ידועות AbstractDenseNdArray <T, U מרחיב את NdArray <T>>, AbstractNdArray <T> > , BooleanDenseNdArray , BooleanNdArray , ByteDenseNdArray , ByteNdArray , DenseNdArray <T>, DoubleNdArray , DoubleNdArrayN , DoubleNdArray מערך , IntDenseNdArray , IntNdArray , LongDenseNdArray , 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) מחזירה רצף של כל האלמנטים בממד נתון. |
בוליאני מופשט | שווה (Object obj) בודק שוויון בין מערכים 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()
של מערך היעד חייבת להיות שווה לצורה של מערך זה, אחרת נזרק חריג. לאחר ההעתקה, ניתן לשנות את התוכן של שני המערכים באופן עצמאי, מבלי להשפיע זה על זה.
פרמטרים
dst | מערך כדי לקבל עותק של התוכן של מערך זה |
---|
מחזיר
- המערך הזה
זורק
חריג טיעון לא חוקי | אם הצורה של dst אינה שווה לצורה של מערך זה |
---|
תקציר ציבורי NdArraySequence <? מרחיב רכיבי NdArray <T>> (int dimensionIdx)
מחזירה רצף של כל האלמנטים בממד נתון.
באופן הגיוני, ניתן לשטח את המערך N-ממדי בוקטור יחיד, כאשר הסקלרים של האלמנט (n - 1)
קודמים לאלו של האלמנט (n)
ה-th, עבור סך ערכי 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
זורק
חריג טיעון לא חוקי | אם 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 | אובייקט להשוות איתו את המערך הזה |
---|
מחזיר
- true אם מערך זה שווה לאובייקט המסופק
תקציר ציבורי NdArray <T> get (ארוכות... קואורדינטות)
מחזירה את האלמנט N-ממדי של מערך זה בקואורדינטות הנתונות.
ניתן לאחזר אלמנטים מכל אחד מהממדים של מערך זה. לדוגמה, אם מספר הקואורדינטות שווה למספר הממדים של מערך זה, מוחזר מערך rank-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 | אם חלק מהקואורדינטות נמצאות מחוץ לגבולות המימד שלהן |
---|---|
חריג דירוג בלתי חוקי | אם מספר הקואורדינטות אינו מספיק כדי לגשת לאלמנט סקלרי |
תקציר ציבורי NdArray <T> read ( DataBuffer <T> dst)
קרא את התוכן של מערך N-ממדי זה לתוך מאגר היעד.
גודל המאגר חייב להיות שווה או גדול יותר לגודל size()
של מערך זה, או שיוצא חריג. לאחר ההעתקה, ניתן לשנות את התוכן של המאגר והמערך באופן עצמאי, מבלי להשפיע זה על זה.
פרמטרים
dst | מאגר היעד |
---|
מחזיר
- המערך הזה
זורק
BufferOverflowException | אם המאגר לא יכול להחזיק את התוכן של מערך זה |
---|
ראה גם
תקציר ציבורי NdArraySequence <? מרחיב NdArray <T>> סקלרים ()
מחזירה רצף של כל הסקלרים במערך זה.
זה שווה ערך ל-call elements(shape().numDimensions() - 1)
מחזיר
- רצף
NdArray
תקציר ציבורי של NdArray <T> ( NdArray <T> src, long... coordinates)
מקצה את הערך של האלמנט 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 | אם חלק מהקואורדינטות נמצאות מחוץ לגבולות המימד שלהן |
---|---|
חריג דירוג בלתי חוקי | אם מספר הקואורדינטות אינו מספיק כדי לגשת לאלמנט סקלרי |
פרוסה ציבורית של 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 | אם למאגר אין מספיק נתונים כדי לכתוב למערך זה |
---|