access elements of vector within struct

Hi all,
I want to update the values of a vector, within a struct, recursively, in a for loop. In particular, I am receiving real time inputs(yobs, observations in milliseconds for several hours), for different objects, which I am storing within a struct (S, for example) :
yobs = randn(1,100); %vector of observations, which i am receiving one by one
S = struct;
S.A = nan(1,100); %preallocate for speed
for ii = 1:numel(yobs)
temp = S.A;
temp(ii) = yobs(ii);
S.A = temp;
end
Accessing the struct in this way, requires a copy of S.A into temp, which will be slow since the iterations will be over millions of observations.
Alternatively, I could not preallocate S.A, but that will also consume time. Is it absolutely necessary to copy the previous values of S.A into a temporary variable as above? thank you

 採用された回答

Voss
Voss 2022 年 4 月 22 日

1 投票

"Is it absolutely necessary to copy the previous values of S.A into a temporary variable as above?"
No, it's not necessary.
yobs = randn(1,100); %vector of observations, which i am receiving one by one
S = struct;
S.A = nan(1,100); %preallocate for speed
for ii = 1:numel(yobs)
S.A(ii) = yobs(ii);
end

1 件のコメント

dleal
dleal 2022 年 4 月 22 日
thank you _ ... for some reason I thought S.A(ii) would produce a struct array. I keep confusing S(ii).A and S.A(ii)... thank you!

サインインしてコメントする。

その他の回答 (1 件)

Matt J
Matt J 2022 年 4 月 22 日
編集済み: Matt J 2022 年 4 月 22 日

0 投票

S.A doesn't appear to be playing any role within your loop at all. You could just as easily have done,
temp = nan(1,100); %preallocate for speed
for ii = 1:numel(yobs)
temp(ii) = yobs(ii);
end
S.A = temp;

カテゴリ

ヘルプ センター および File ExchangeData Types についてさらに検索

製品

リリース

R2022a

タグ

質問済み:

2022 年 4 月 22 日

編集済み:

2022 年 4 月 22 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by