คลาสย่อยทางอ้อมที่รู้จัก AbstractDenseNdArray <T, U ขยาย NdArray <T>>, AbstractNdArray <T, U ขยาย NdArray <T>>, BooleanDenseNdArray , BooleanNdArray , ByteDenseNdArray , ByteNdArray , DenseNdArray <T>, DoubleDenseNdArray , DoubleNdArray , FloatDenseNdArray , FloatNdArray , 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 dimensionsIdx) ส่งกลับลำดับขององค์ประกอบทั้งหมดในมิติที่กำหนด |
บูลีนนามธรรม | เท่ากับ (วัตถุ obj) ตรวจสอบความเท่าเทียมกันระหว่างอาร์เรย์ n มิติ |
นามธรรม NdArray <T> | รับ (ยาว... พิกัด) ส่งกลับองค์ประกอบมิติ N ของอาร์เรย์นี้ที่พิกัดที่กำหนด |
นามธรรมต | getObject (พิกัดยาว...) ส่งกลับค่าของสเกลาร์ที่พบในพิกัดที่กำหนด |
นามธรรม NdArray <T> | |
นามธรรม NdArraySequence <? ขยาย NdArray <T>> | สเกลาร์ () ส่งกลับลำดับของสเกลาร์ทั้งหมดในอาร์เรย์นี้ |
นามธรรม NdArray <T> | |
นามธรรม NdArray <T> | setObject (ค่า T, ยาว... พิกัด) กำหนดค่าของสเกลาร์ที่พบในพิกัดที่กำหนด |
นามธรรม NdArray <T> | |
นามธรรม NdArray <T> |
วิธีการสืบทอด
วิธีการสาธารณะ
บทคัดย่อสาธารณะ NdArray <T> copyTo ( NdArray <T> dst)
คัดลอกเนื้อหาของอาร์เรย์นี้ไปยังอาร์เรย์ปลายทาง
shape()
ของอาร์เรย์ปลายทางจะต้องเท่ากับรูปร่างของอาร์เรย์นี้ มิฉะนั้นจะมีข้อยกเว้นเกิดขึ้น หลังจากการคัดลอก เนื้อหาของอาร์เรย์ทั้งสองสามารถเปลี่ยนแปลงได้อย่างอิสระ โดยไม่ส่งผลกระทบซึ่งกันและกัน
พารามิเตอร์
วันเวลา | อาร์เรย์เพื่อรับสำเนาเนื้อหาของอาร์เรย์นี้ |
---|
การส่งคืน
- อาร์เรย์นี้
ขว้าง
ข้อยกเว้นอาร์กิวเมนต์ที่ผิดกฎหมาย | ถ้ารูปร่างของ dst ไม่เท่ากับรูปร่างของอาเรย์นี้ |
---|
นามธรรมสาธารณะ NdArraySequence <? ขยาย องค์ประกอบ NdArray <T>> (int dimensionsIdx)
ส่งกลับลำดับขององค์ประกอบทั้งหมดในมิติที่กำหนด
ตามหลักเหตุผลแล้ว อาร์เรย์ 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);
});
}
พารามิเตอร์
มิติข้อมูลIdx | ดัชนีของมิติ |
---|
การส่งคืน
- ลำดับ
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
}
โปรดทราบว่าการคำนวณที่จำเป็นในการตรวจสอบความเท่าเทียมกันระหว่างสองอาร์เรย์อาจมีราคาแพงในบางกรณี ดังนั้นจึงขอแนะนำว่าอย่าใช้วิธีนี้ในเส้นทางวิกฤติที่ประสิทธิภาพมีความสำคัญ
พารามิเตอร์
วัตถุประสงค์ | วัตถุที่จะเปรียบเทียบอาร์เรย์นี้ด้วย |
---|
การส่งคืน
- จริงถ้าอาร์เรย์นี้เท่ากับวัตถุที่ให้มา
นามธรรมสาธารณะ 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 | บัฟเฟอร์ต้นทาง |
---|
การส่งคืน
- อาร์เรย์นี้
ขว้าง
บัฟเฟอร์ UnderflowException | หากบัฟเฟอร์มีข้อมูลเหลือไม่เพียงพอที่จะเขียนลงในอาร์เรย์นี้ |
---|