размещение данных в структурах в Matlab? - PullRequest
0 голосов
/ 07 марта 2012

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

  1. частота [1024]
  2. сила [1024]

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

s(1).frame=1        %this will show the iteration no.   
s(1).str=strength  
s(1).freq=frequency  

теперь мне нужно 97 таких структур, скажем s (1) - s (97) в массиве.

мой вопрос: как я могу создать массив структур в моем цикле. Пожалуйста, помогите мне.

1 Ответ

2 голосов
/ 07 марта 2012

В таких случаях мне нравится повторяться в обратном направлении, так как это вызывает полное выделение памяти при первом выполнении цикла. Тогда код будет выглядеть примерно так:

%Reset the structure
s = struct;
for ix = 97:-1:1
    %Do stuff

    %Store the data
    s(ix).frame = ix;
    s(ix).str = strength;
    s(ix).freq = frequency;
end

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

%Reset the structure
s = struct;
for ix = 1:97
    %Do stuff

    %Store the data
    s(ix).frame = ix;
    s(ix).str = strength;
    s(ix).freq = frequency;
end

Или, если вам действительно нужна производительность предварительно выделенного массива структур, но вы не знаете, насколько большим он будет в начале, вы можете сделать что-то вроде этого:

%Reset the structure
s = struct;
for ix = 1:97
    %Do stuff

    %Extend if needed
    if length(s)<ix
        s(ix*2).frame = nan;  %Double allocation every time you reach the end.
    end

    %Store the data
    s(ix).frame = ix;
    s(ix).str = strength;
    s(ix).freq = frequency;
end

%Clip extra allocation
s = s(1:ix);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...