Математическая матрица на Java - PullRequest
0 голосов
/ 30 октября 2018

Насколько я понимаю, двумерная матрица, которая используется в математике, может быть создана в Java с использованием двумерного массива. Конечно, есть вещи, которые вы можете сделать с настоящими математическими матрицами, такие как сложение и вычитание. Однако на Java вам потребуется написать код, чтобы сделать это, и есть библиотеки, которые предоставляют эту функциональность.

Хотелось бы узнать, является ли массив Java даже оптимальным способом работы с матричными данными. Я могу вспомнить случаи, когда в 2-мерной матрице заполнены некоторые индексы, а многие просто остаются пустыми из-за характера данных. Для меня это поднимает вопрос, является ли это пустой тратой памяти, особенно если матрица очень большая и имеет много пустых индексов.

Разве специализированные математические библиотеки Java по-разному работают с матрицами и не полагаются на 2d-массив? Или они также используют обычный массив Java и просто живут с потраченной впустую памятью?

1 Ответ

0 голосов
/ 30 октября 2018

Несколько вещей:

  1. Никогда не создавайте матрицы из двухмерных массивов. Всегда желательно иметь одномерный массив с аксессорами классов, которые принимают 2 параметра. Причина исключительно для производительности. Когда вы выделяете непрерывный кусок памяти, вы даете процессору возможность выделить всю матрицу на одной странице памяти, что минимизирует потери в кеше и, следовательно, повышает производительность.

  2. Матрицы со многими нулями называются разреженными матрицами . Это всегда компромисс между использованием разреженных матриц и наличием множества нулей в вашем массиве.

    • Непрерывный массив позволит компилятору использовать векторные операции, такие как SIMD , для сложения, вычитания и т. Д.
    • Несмежный массив будет быстрее, если относительное число нулей действительно велико, и вы реализуете его разумно.
  3. Я не верю, что java предоставляет библиотеку для разреженных матриц, но я уверен, что есть некоторые. Я разработчик C ++, и я пришел к этому вопросу, потому что я имел дело с матрицами много в течение моей академической жизни. Знаменитая библиотека C ++ с простым и высокоуровневым интерфейсом: Armadillo .

Надеюсь, это поможет.

...