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>
copyTo ( NdArray <T> dst)
העתק את התוכן של מערך זה למערך היעד.
מופשט NdArraySequence <? מרחיב את NdArray <T>>
אלמנטים (int dimensionIdx)
מחזירה רצף של כל האלמנטים בממד נתון.
בוליאני מופשט
שווה (Object obj)
בודק שוויון בין מערכים n-ממדיים.
מופשט NdArray <T>
לקבל (ארוכות... קואורדינטות)
מחזירה את האלמנט N-ממדי של מערך זה בקואורדינטות הנתונות.
תקציר T
getObject (ארוכות... קואורדינטות)
מחזירה את הערך של הסקלר שנמצא בקואורדינטות הנתונות.
מופשט NdArray <T>
קרא ( DataBuffer <T> dst)
קרא את התוכן של מערך N-ממדי זה לתוך מאגר היעד.
מופשט NdArraySequence <? מרחיב את NdArray <T>>
סקלרים ()
מחזירה רצף של כל הסקלרים במערך זה.
מופשט NdArray <T>
set ( NdArray <T> src, long... coordinates)
מקצה את הערך של האלמנט N-ממדי שנמצא בקואורדינטות הנתונות.
מופשט NdArray <T>
setObject (ערך T, ארוכות... קואורדינטות)
מקצה את הערך של הסקלר שנמצא בקואורדינטות הנתונות.
מופשט NdArray <T>
פרוסה ( אינדקס... מדדים)
יוצר תצוגה רב מימדית (או פרוסה) של מערך זה על ידי מיפוי מימד אחד או יותר לבוררי האינדקס הנתונים.
מופשט NdArray <T>
כתוב ( DataBuffer <T> src)
כתוב את התוכן של מערך N-ממדי זה ממאגר המקור.

שיטות בירושה

שיטות ציבוריות

תקציר ציבורי 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 אם למאגר אין מספיק נתונים כדי לכתוב למערך זה
ראה גם