Лучший способ "пометить" данные для быстрого разбора через matlab?

Я собираю данные в таблицу Excel с помощью программы labview, данные собираются непрерывно с регулярным интервалом, и события помечаются в файле в одном из столбцов, где TaskA_0 обозначает начало события, а TaskA_1 обозначает конец. это фрагмент данных:

Time            Data 1      Data 2      Data 3      Data 4      Event Name
13:38:41.888    0.719460527 0.701654664 0.221332969 0.012234448 Task A_0
13:38:41.947    0.437707516 0.588673334 0.524042112 0.309975646 Task A_1
13:38:42.021    0.186847503 0.589175696 0.393891242 0.917737946 Task B_0
13:38:42.115    0.44490411  0.073132298 0.897701096 0.633815257 Task B_1
13:38:42.214    0.833793601 0.004524633 0.40950937  0.808966844 Task C_0
13:38:42.314    0.953997375 0.055717025 0.914080619 0.166492915 Task C_1
13:38:42.414    0.245698313 0.066643778 0.515709814 0.606289696 Task D_0
13:38:42.514    0.248038367 0.862138045 0.025489223 0.352926629 Task D_1

В настоящее время я загружаю это в Matlab, используя xlsread, а затем запустить strfind чтобы найти индексы строк маркеров событий, чтобы разбить мои данные на задачи, где каждая задача - это данные в смежных столбцах между TaskA_0 и TaskA_1 (здесь нет данных между, но обычно есть, также между именами событий там пустые клетки обычно). Это лучший метод для этого? Когда у меня есть это в отдельных переменных, я выполняю идентичные действия с каждой переменной, обычно базовую статистику и некоторые данные. Если я хочу выполнить пакетную обработку своих данных, я должен переписывать эти строки снова и снова, чтобы разбить данные по задачам. Что даже я знаю, неправильно и ужасно неэффективно, но я не знаю, как лучше это сделать.

[Data,Text]= xlsread('C:\TestData.xlsx',2); %time column and event name column end up in text, as does the data headers, hence the +1 for the row indices
IndexTaskAStart = find(~cellfun(@isempty,strfind(Text(:,2),'TaskA_0')))+1;
IndexTaskAEnd = find(~cellfun(@isempty, strfind(Text(:,2),'TaskA_1')))+1;
TaskAData = Data([IndexTaskAStart:IndexTaskAEnd,:];

Теперь я могу выполнить анализ столбцов в TaskAData и повторить процесс для оставшихся задач.

1 ответ

Предполагая, что вы не можете изменить формат файлов, но знаете, какие задачи вы ищете, вы все равно можете автоматизировать поиск, создав список имен задач, просто добавив _0 и _1 к именам задач для поиска. Затем не создавайте отдельные именованные переменные, а сохраняйте их в массиве ячеек для упрощения циклов:

tasknames = {'Task A', 'Task B', 'Task C'}

for n = 1:numel(tasknames)
    first = find(~cellfun(@isempty,strfind(Text(:,2),[tasknames{n},'_0'])))+1;
    last = find(~cellfun(@isempty, strfind(Text(:,2),[tasknames{n},'_1'])))+1;
    task_data{n} = Data(first:last, :);
    % whatever other analysis you require goes here
end

Если существует большое количество имен задач, но они следуют некоторому шаблону, вы можете предпочесть создавать их на лету, а не предварительно распределять список в tasknames,

Другие вопросы по тегам