Matlab ускорить функцию - PullRequest
       1

Matlab ускорить функцию

0 голосов
/ 29 июня 2011

Я читаю кучу файлов Excel и загружаю их в базу данных SQL с помощью matlab. Я читаю в столбцах как массивы ячеек, а затем хочу просмотреть строки, для которых столбец дат dateColumn имеет неправильное значение.

В настоящее время я делаю вектор логических значений, где 1 означает, что дата хорошая:

arrayOfBools = cellfun(@(x) ~isnan(datenum(x)),dateColumn);

И затем обрезая остальные столбцы по этому вектору. Например:

Ticker = Ticker(arrayOfBools);

Проблема в том, что у меня есть 35 000 строк в каждой электронной таблице, и arrayOfBools = cellfun (@ (x) ~ isnan (datenum (x)), dateColumn); занимает 55 секунд, что слишком много, учитывая количество таблиц, которые мне нужно пройти. Есть ли способ, которым я могу сделать это более эффективно?

1 Ответ

1 голос
/ 29 июня 2011

Вы должны быть в состоянии передать массив ячеек строк dateColumn непосредственно в DATENUM , не используя CELLFUN , что, вероятно, даст вам улучшение скорости:

arrayOfBools = ~isnan(datenum(dateColumn));

Однако DATENUM , по-видимому, претерпел несколько обновлений в некоторых из последних ревизий, и поэтому его поведение (и действительность вышеуказанного решения) будет сильно зависеть от того, какую версию MATLAB вы используете , В новейшей версии (R2011a) представляется, что при передаче массива ячеек строк в качестве ввода будет возвращен массив символов преобразованных строк данных вместо вектора чисел даты (см. Последний пример в Раздел примеров ). Это отличается от R2010b, где передача массива ячеек строк возвращает вектор чисел даты.

Однако, когда я пробовал несколько разных строк даты в R2010b, я никогда не получал NaN, полученный из-за недопустимой строки даты. Это просто выдает ошибку. Я предполагаю, что код, который вы запускаете (который ищет вывод NaN), предназначен для более старой версии MATLAB. Вы должны указать эту версию вместе с примером кода в своем вопросе, чтобы нам было проще всего вам помочь.

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