Các lớp con gián tiếp đã biết Tóm tắtDenseNdArray <T, U mở rộng NdArray <T>>, Tóm tắtNdArray <T, U mở rộng NdArray <T>>, BooleanDenseNdArray , BooleanNdArray , ByteDenseNdArray , ByteNdArray , DenseNdArray <T>, DoubleDenseNdArray , DoubleNdArray , FloatDenseNdArray , FloatNdArray , IntDenseNdArray , IntNdArray , DàiDày ĐặcNdMảng , LongNdArray và 11 người khác. |
Cấu trúc dữ liệu có kích thước N.
Giao diện `NdArray` tạo ra sự trừu tượng giữa bộ lưu trữ vật lý của bản ghi dữ liệu, có thể là tuyến tính hoặc phân đoạn và cách biểu diễn logic của nó. Nói chung, chúng đạt được hiệu suất tốt hơn mảng đa chiều tiêu chuẩn trong Java bằng cách ánh xạ trực tiếp các phân đoạn dữ liệu tuyến tính trong bộ nhớ.
Giống như DataBuffer
, các phiên bản NdArray
hỗ trợ lập chỉ mục 64 bit để chúng có thể được sử dụng để ánh xạ các bản ghi dữ liệu rất lớn. Chúng cũng hỗ trợ các tọa độ đặc biệt cho phép di chuyển ngang các giá trị của chúng theo bất kỳ hướng nào hoặc chỉ chọn một tập hợp con trong số chúng.
Ví dụ về cách sử dụng:
// 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));
Phương pháp công khai
trừu tượng NdArray <T> | |
trừu tượng NdArraySequence <? mở rộng NdArray <T>> | các phần tử (int DimensionIdx) Trả về một chuỗi gồm tất cả các phần tử ở một thứ nguyên nhất định. |
trừu tượng boolean | bằng (Đối tượng obj) Kiểm tra sự bằng nhau giữa các mảng n chiều. |
trừu tượng NdArray <T> | lấy (tọa độ... dài) Trả về phần tử N chiều của mảng này tại tọa độ đã cho. |
trừu tượng T | getObject (tọa độ dài...) Trả về giá trị của đại lượng vô hướng được tìm thấy tại tọa độ đã cho. |
trừu tượng NdArray <T> | |
trừu tượng NdArraySequence <? mở rộng NdArray <T>> | vô hướng () Trả về một chuỗi tất cả các đại lượng vô hướng trong mảng này. |
trừu tượng NdArray <T> | |
trừu tượng NdArray <T> | setObject (giá trị T, tọa độ dài...) Gán giá trị của đại lượng vô hướng được tìm thấy tại tọa độ đã cho. |
trừu tượng NdArray <T> | lát ( Chỉ mục... chỉ số) Tạo chế độ xem (hoặc lát) đa chiều của mảng này bằng cách ánh xạ một hoặc nhiều thứ nguyên tới các bộ chọn chỉ mục đã cho. |
trừu tượng NdArray <T> |
Phương pháp kế thừa
Phương pháp công khai
tóm tắt công khai NdArray <T> copyTo ( NdArray <T> dst)
Sao chép nội dung của mảng này vào mảng đích.
shape()
của mảng đích phải bằng hình dạng của mảng này, nếu không sẽ xảy ra ngoại lệ. Sau khi sao chép, nội dung của cả hai mảng có thể được thay đổi độc lập mà không ảnh hưởng lẫn nhau.
Thông số
dst | mảng để nhận bản sao nội dung của mảng này |
---|
Trả lại
- mảng này
Ném
Đối số bất hợp phápNgoại lệ | nếu hình dạng của dst không bằng hình dạng của mảng này |
---|
tóm tắt công khai NdArraySequence <? mở rộng các phần tử NdArray <T>> (int DimensionIdx)
Trả về một chuỗi gồm tất cả các phần tử ở một thứ nguyên nhất định.
Về mặt logic, mảng N chiều có thể được làm phẳng trong một vectơ duy nhất, trong đó các giá trị vô hướng của phần tử thứ (n - 1)
đứng trước các giá trị của phần tử thứ (n)
, cho tổng giá trị size()
.
Ví dụ: cho ma trận nxm
trên trục [x, y]
, các phần tử được lặp theo thứ tự sau:
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
Sau đó, chuỗi trả về có thể được lặp lại để truy cập từng phần tử, bằng cách gọi forEach(Consumer)
hoặc 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);
});
}
Thông số
Idx thứ nguyên | chỉ số của kích thước |
---|
Trả lại
- một chuỗi
NdArray
Ném
Đối số bất hợp phápNgoại lệ | nếu dimensionIdx lớn hơn hoặc bằng tổng số thứ nguyên của mảng này |
---|
boolean trừu tượng công khai bằng (Object obj)
Kiểm tra sự bằng nhau giữa các mảng n chiều.
Một mảng bằng một đối tượng khác nếu đối tượng này là một NdArray
khác có cùng hình dạng, kiểu và các phần tử bằng nhau và theo cùng thứ tự. Ví dụ:
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
}
Lưu ý rằng việc tính toán cần thiết để xác minh sự bằng nhau giữa hai mảng có thể tốn kém trong một số trường hợp và do đó, bạn không nên sử dụng phương pháp này trong đường dẫn quan trọng nơi hiệu suất đóng vai trò quan trọng.
Thông số
vật thể | đối tượng để so sánh mảng này với |
---|
Trả lại
- đúng nếu mảng này bằng đối tượng được cung cấp
tóm tắt công khai NdArray <T> get (tọa độ... dài)
Trả về phần tử N chiều của mảng này tại tọa độ đã cho.
Các phần tử có kích thước bất kỳ của mảng này đều có thể được truy xuất. Ví dụ: nếu số tọa độ bằng số thứ nguyên của mảng này thì mảng xếp hạng 0 (vô hướng) sẽ được trả về, sau đó có thể nhận được giá trị nào bằng cách gọi `array.getObject()`.
Bất kỳ thay đổi nào được áp dụng cho các phần tử được trả về cũng ảnh hưởng đến dữ liệu của mảng này vì không có bản sao nào liên quan.
Lưu ý rằng việc gọi phương thức này là một cách tương đương và hiệu quả hơn để cắt mảng này theo một vô hướng đơn, tức là array.get(x, y, z)
bằng array.slice(at(x), at(y), at(z))
Thông số
tọa độ | tọa độ của phần tử cần truy cập, không có phần tử nào sẽ trả về mảng này |
---|
Trả lại
- phần tử tại chỉ mục này
Ném
IndexOutOfBoundsNgoại lệ | nếu một số tọa độ nằm ngoài giới hạn của kích thước tương ứng của chúng |
---|
tóm tắt công khai T getObject (tọa độ... dài)
Trả về giá trị của đại lượng vô hướng được tìm thấy tại tọa độ đã cho.
Để truy cập phần tử vô hướng, số tọa độ được cung cấp phải bằng số chiều của mảng này (tức là thứ hạng của nó). Ví dụ:
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);
. Thông số
tọa độ | tọa độ của vô hướng để giải quyết |
---|
Trả lại
- giá trị của đại lượng đó
Ném
IndexOutOfBoundsNgoại lệ | nếu một số tọa độ nằm ngoài giới hạn của kích thước tương ứng của chúng |
---|---|
Xếp hạng bất hợp phápNgoại lệ | nếu số tọa độ không đủ để truy cập phần tử vô hướng |
tóm tắt công khai NdArray <T> đọc ( DataBuffer <T> dst)
Đọc nội dung của mảng N chiều này vào bộ đệm đích.
Kích thước của bộ đệm phải bằng hoặc lớn hơn size()
của mảng này, nếu không sẽ xảy ra ngoại lệ. Sau khi sao chép, nội dung của bộ đệm và mảng có thể được thay đổi độc lập mà không ảnh hưởng lẫn nhau.
Thông số
dst | bộ đệm đích |
---|
Trả lại
- mảng này
Ném
BufferOverflowNgoại lệ | nếu bộ đệm không thể chứa nội dung của mảng này |
---|
Xem thêm
tóm tắt công khai NdArraySequence <? mở rộng NdArray <T>> vô hướng ()
Trả về một chuỗi tất cả các đại lượng vô hướng trong mảng này.
Điều này tương đương với elements(shape().numDimensions() - 1)
Trả lại
- một chuỗi
NdArray
tóm tắt công khai tập hợp NdArray <T> ( NdArray <T> src, tọa độ dài...)
Gán giá trị của phần tử N chiều được tìm thấy tại tọa độ đã cho.
Số tọa độ được cung cấp có thể nằm trong khoảng từ 0 đến hạng - 1. Ví dụ:
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
Thông số
src | một mảng các giá trị để gán |
---|---|
tọa độ | tọa độ của phần tử cần gán |
Trả lại
- mảng này
Ném
IndexOutOfBoundsNgoại lệ | nếu một số tọa độ nằm ngoài giới hạn của kích thước tương ứng của chúng |
---|
tóm tắt công khai NdArray <T> setObject (giá trị T, tọa độ dài...)
Gán giá trị của đại lượng vô hướng được tìm thấy tại tọa độ đã cho.
Để truy cập phần tử vô hướng, số tọa độ được cung cấp phải bằng số chiều của mảng này (tức là thứ hạng của nó). Ví dụ:
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);
Thông số
giá trị | giá trị để gán |
---|---|
tọa độ | tọa độ của vô hướng để gán |
Trả lại
- mảng này
Ném
IndexOutOfBoundsNgoại lệ | nếu một số tọa độ nằm ngoài giới hạn của kích thước tương ứng của chúng |
---|---|
Xếp hạng bất hợp phápNgoại lệ | nếu số tọa độ không đủ để truy cập phần tử vô hướng |
tóm tắt công khai lát cắt NdArray <T> ( Chỉ mục... chỉ mục)
Tạo chế độ xem (hoặc lát) đa chiều của mảng này bằng cách ánh xạ một hoặc nhiều thứ nguyên tới các bộ chọn chỉ mục đã cho.
Các lát cắt cho phép duyệt qua một mảng N chiều theo bất kỳ trục nào của nó và/hoặc chỉ lọc các phần tử quan tâm. Ví dụ: đối với một ma trận nhất định trên trục [x, y]
, có thể lặp lại các phần tử tại y=0
cho tất cả x
.
Bất kỳ thay đổi nào được áp dụng cho lát cắt được trả về cũng ảnh hưởng đến dữ liệu của mảng này vì không có bản sao nào liên quan.
Ví dụ về cách sử dụng:
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
});
}
Thông số
chỉ số | bộ chọn chỉ mục cho mỗi thứ nguyên, bắt đầu từ thứ nguyên 0 của mảng này. |
---|
Trả lại
- phần tử kết quả của việc lựa chọn chỉ mục
Ném
IndexOutOfBoundsNgoại lệ | nếu một số tọa độ nằm ngoài giới hạn của kích thước tương ứng của chúng |
---|
tóm tắt công khai NdArray <T> ghi ( DataBuffer <T> src)
Viết nội dung của mảng N chiều này từ bộ đệm nguồn.
Kích thước của bộ đệm phải bằng hoặc lớn hơn size()
của mảng này, nếu không sẽ xảy ra ngoại lệ. Sau khi sao chép, nội dung của bộ đệm và mảng có thể được thay đổi độc lập mà không ảnh hưởng lẫn nhau.
Thông số
src | bộ đệm nguồn |
---|
Trả lại
- mảng này
Ném
Bộ đệmUnderflowNgoại lệ | nếu bộ đệm không còn đủ dữ liệu để ghi vào mảng này |
---|