Максимальный размер массива в MATLAB?

Я пишу программу MATLAB, которая генерирует матрицу с 1 миллионом строк и неизвестной суммой столбцов (в макс. 1 миллионе).

Я пытался предварительно выделить эту матрицу:

a=zeros(1000000,1000000)

но я получил ошибку:

"Максимальный переменный размер, позволенный программой, превышен".

У меня есть чувство, что не предварительное выделение этой матрицы серьезно замедлит код.

Это сделало меня любопытным: Каков максимальный размер массива в MATLAB?

Обновление: я собираюсь изучить разреженные матрицы, потому что результатом, к которому я стремлюсь в этой конкретной проблеме, будет матрица, состоящая для большей части нулей.

6
задан chappjc 6 March 2015 в 20:34
поделиться

2 ответа

Чтобы узнать реальный максимальный размер массива (только для Windows), используйте команду user = memory. user.maxPossibleArrayBytes показывает, сколько байт непрерывной оперативной памяти свободно. Разделите это число на количество байт на элемент вашего массива (8 для парных массивов) и вы узнаете максимальное количество элементов, которые вы можете предварительно распределить.

Обратите внимание, что, как сказал woodchips, Matlab может потребоваться скопировать ваш массив (например, если вы передаете значение подфункции). По моему опыту 75% от максимально возможного массива обычно доступно несколько раз.

6
ответ дан 8 December 2019 в 14:42
поделиться

Посмотрите на эту страницу, там перечислены максимальные размеры: Максимальные размеры

Похоже, что это порядка нескольких сотен миллионов. Обратите внимание, что матрица, которую вы пытаетесь создать, состоит из 10e6 * 10e6 = 10e12 элементов. Это на много порядков больше, чем указанные максимальные размеры, и у вас также нет такого количества оперативной памяти в системе.

Я предлагаю поискать другой алгоритм для того, чего вы пытаетесь достичь.

8
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: