Медленный xlsread в MATLAB - PullRequest
3 голосов
/ 30 мая 2011

Вот результат профилированного прогона моей программы MATLAB. Мне нужно запустить эту симуляцию несколько сотен тысяч раз (~ 100 000 раз).

The abnormally slow xlsread

Таким образом, мне нужен более быстрый способ чтения файла Excel.

Технические характеристики: файл Excel имеет ячейки 10000x2, и каждый прогон моделирования считывает один такой лист из 5 отдельных файлов Excel.

ОБНОВЛЕНИЕ: Я перевел xlsread в базовый режим, а также сократил количество вызовов, объединив свой ввод в один файл. Следующая цель - xlswrite сейчас. Ах, это чувство погружения. : |

Updated Profile Summary

ПРИМЕЧАНИЕ: Хотя запись в файл CSV с использованием dlmread выполняется очень быстро (примерно в 20 раз), мне нужно использовать удобство отдельных листов, предоставляемых файлом .xls.

1 Ответ

1 голос
/ 31 мая 2011

Я не думаю, что вы сможете извлечь много из xlswrite, если вам понадобится листы Excel в качестве вывода.

Как насчет распараллеливания?

Есть ли у вас доступ к инструментарию параллельных вычислений? Или, может быть, вы можете запустить два экземпляра MATLAB, если ваш ящик поддерживает его. Если это так, вы можете рассмотреть два подхода:

  1. Пусть первый процесс выполнит часть xlsread, часть моделирования, а затем запишет в матовые файлы / обычный двоичный файл / CSV, какой бы ни был самый быстрый, сохраняя при этом целостность ваших данных. Попросите другой процесс преобразовать файлы Matfiles / промежуточные данные в Excel, используя xlswrite.

  2. Имейте N экземпляров / работников MATLAB (N зависит от мощности вашего физического компьютера). Распараллелить всю часть чтения-процесса-записи среди N рабочих. Обратите внимание, я не уверен, как Excel будет масштабироваться при вызове N работников! (xlswrite использует ActiveX / MS Excel для записи данных).

Как и при любом параллельном подходе, ваш пробег будет зависеть от сложности симуляции от требуемого файлового ввода-вывода и его производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...