Filter löschen
Filter löschen

Indexing through a cell array

1 Ansicht (letzte 30 Tage)
Hari krishnan
Hari krishnan am 23 Sep. 2021
Kommentiert: Jan am 23 Sep. 2021
I am looking to populate cell array named 'age_list' based on the values i have in two columns; named 'day' and 'pop'
  • For each specific 'day', i am looking at the corresponding 'pop' value and then update the 'age_list' based on it.
  • Example: On day 4, the population is 3. Therefore the cell array 'age_list' will have 'three' values with the {2,3,4}.
Can anyone suggest me on how to perform this? Any help will be appreciated.
  6 Kommentare
Jan
Jan am 23 Sep. 2021
Bearbeitet: Jan am 23 Sep. 2021
Is day in all cases 1:numel(day) ? Can the population size shrink? Is {1} a fixed startpoint?
Hari krishnan
Hari krishnan am 23 Sep. 2021
Yes, day in all cases is 1:numel(day).
The population size cannot shrink.
{1} is a fixed starting point.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Jan
Jan am 23 Sep. 2021
A bold try:
day = 1:7;
pop = [1,2,3,3,3,4,6];
age_list = cell(1, numel(day));
age_list{1} = 1; % Is this given?!
for k = 2:numel(day)
new = pop(k) - pop(k - 1);
age_list{k} = cat(2, repmat(age_list{1}, 1, new), age_list{k-1} + 1);
end
age_list
age_list = 1×7 cell array
{[1]} {[1 2]} {[1 2 3]} {[2 3 4]} {[3 4 5]} {[1 4 5 6]} {[1 1 2 5 6 7]}
  2 Kommentare
Hari krishnan
Hari krishnan am 23 Sep. 2021
Bearbeitet: Hari krishnan am 23 Sep. 2021
Thank you very much for the suggestion.
I would like to clarify an issue, if the length of days and pop is not equal, how will this work.
For example;
day = 1:178;
pop = [2,30,30,37,39,55,69,70,72,77,78,78,89,90,96,98,98,103,103,106,107,121,178];
Jan
Jan am 23 Sep. 2021
I cannot guess, what you expect as output in this case.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by