маркировка фрагментов данных после нахождения индексов - PullRequest
0 голосов
/ 21 марта 2020

Я хотел бы найти определенные индексы для переменной, называемой «заголовок». Я хочу найти индексы, относящиеся к значению в «заголовке» между 0 и 20, 20 и 40, 40 и 60, и т. Д. c. Затем я хочу извлечь другие переменные в зависимости от этих показателей, например, скорость. Я написал это, но я думаю, что это неэффективно, поэтому хотел бы, но это в какой-то алгоритм l oop или индексирования.

heading_index1 = find(heading>0 & heading<=20);
heading_index2 = find(heading>20 & heading<=40);
heading_index3 = find(heading>40 & heading<=60);

et c

speed1 = speed(heading_index1);
speed2 = speed(heading_index2);
speed3 = speed(heading_index3);

др c

1 Ответ

1 голос
/ 21 марта 2020

более эффективно, если вы используете логическое индексирование напрямую (поэтому между ними нет команды find). Если вы хотите автоматизировать все это, вы можете использовать структуру или ячейки:

% random vectors to create a minimum working example
heading = rand(100,1)*100;
speed = rand(size(heading));

% limit vector
lim = [0 20 40 60];

% declare storage structures
S = struct();
C = cell(1,length(lim)-1);

% loop through limits
for i = 1:length(lim)-1
    % logical vector
    lg = heading > lim(i) & heading <= lim(i+1);
    % index (its faster to use logical vectors for indexing than integers)
    chunk = speed(lg);

    % assign to struct
    fld = num2str(i,'F%d');
    S.(fld) = chunk;

    % assign to cell
    C{i} = chunk;
end

Вы можете выбрать, нравится ли вам структурный или клеточный путь. Это не должно иметь никакого значения с точки зрения пространства памяти.

Лично я предпочитаю структуру, поскольку я могу определять имена, которые я могу интерпретировать, но также немного утомительно создавать имя поля, а не просто индексировать ячейку

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