Как реализовать библиотеку многомерных массивов с нуля, такую как nd4j или numpy

#java #numpy #multidimensional-array #nd4j

#java #numpy #многомерный массив #nd4j

Вопрос:

Я создаю эквивалентную библиотеку numpy, такую как nd4j, на Java, но я хочу реализовать ее сам. Однако я не могу найти в Интернете никаких ресурсов, которые помогли бы моему исследованию. Я надеюсь поддерживать базовые функции numpy, такие как randn и произведение формы и точки

Я создал класс barebones Matrix, но уже столкнулся с проблемой. Для определения матрицы используются общие термины, но я должен использовать класс Object для хранения n-мерной матрицы.

 public class Matrix<T> {

    Object values;
    int size;

    Matrix() {

    }

    Matrix(int[] shape) {

        size = shape.length;

   }

    Matrix(Object values) {
        this.values = values;

    }

}
  

Библиотека должна выполнять матричные операции, подобные синтаксисам numpy, таким как

 Matrix<int> m = new Matrix<T>([100,100]);
m=m*m;
m  ;
m =10;
m = m m;
m = m^2
m = np.dot(m,m)
  

Я конвертирую файлы java в kotlin, поскольку kotlin поддерживает перегрузку операторов

Комментарии:

1. почему «нужно использовать класс Object»? почему бы и нет T ?

2. это new Matrix<T>([100,100]) не компилируется (в Java)

3. Кажется, вы начинаете с Java, я полагаю, с другого языка. Я бы рекомендовал пройти курс Java. Когда вы дойдете до части, посвященной обобщениям, вы наверняка сможете ответить на свой текущий вопрос.

4. Я знаю, что могу объявить массив типа T подобным образом T[] array , но я хочу, чтобы мой класс поддерживал массивы с несколькими измерениями, такими как 1D, 2D или 3D. Если я использую объявление, подобное приведенному выше, массив будет иметь фиксированные размеры.