Vector output from a for loop

조회 수: 1(최근 30일)
Sercan Yalcin
Sercan Yalcin 2019년 12월 5일
댓글: Sercan Yalcin 2019년 12월 6일
Hello everyone,
I have an hourly temperature data which covers 8760 values inside a vector. The TMP shows the temperature values however the values below in the code is just for example since i can't put 8760 values here.
I want to get PGRED results as a vector output too. However, when i run the code, although it calculates PGRED values for all TMP values, i get an answer only for the last TMP value which is 36 in this case. My question is, how can i get all the PGRED answers inside 1 vector.
Thank you for your help in advance.
for TMP =[12, 3, 36]
if TMP < 9
elseif 9<=TMP & TMP<10
elseif 10<=TMP & TMP<28
elseif 28<=TMP & TMP<40
PGRED= -0.083*TMP + 3.33
else 40 >= TMP

채택된 답변

Raj 2019년 12월 5일
편집: Raj 2019년 12월 5일
TMP =[12, 3, 36];
for ii=1:length(TMP)
if TMP(ii) < 9
elseif 9<=TMP(ii) && TMP(ii)<10
PGRED(ii)= TMP(ii)-9;
elseif 10<=TMP(ii) && TMP(ii)<28
PGRED(ii)= 1;
elseif 28<=TMP(ii) && TMP(ii)<40
PGRED(ii)= -0.083*TMP(ii) + 3.33;
else %40 >= TMP(ii) % this condition is not required. Just give a default condition.

추가 답변(2개)

Walter Roberson
Walter Roberson 2019년 12월 5일
TMP_values = [12, 3, 36];
num_TMP = length(TMP_values);
PGRED = zeros(1, num_TMP);
for TMP_idx = 1 : num_TMP
TMP = TMP_values(TMP_idx);
if TMP < 9
PGRED(TMP_idx) = 0;
elseif 9<=TMP & TMP<10
PGRED(TMP_idx) = TMP-9;
elseif 10<=TMP & TMP<28
PGRED(TMP_idx) = 1;
elseif 28<=TMP & TMP<40
PGRED(TMP_idx) = -0.083*TMP + 3.33;
elseif 40 >= TMP
PGRED(TMP_idx) = 0;
error('Unexpected out of range TMP = %f', TMP)
This is not what I would recommend for this situation: I would recommend that you learn how to use logical indexing. However, I do recommend that you learn to use this pattern, of storing all of the values in a vector and indexing over the length of the vector and using the index to store the results.
  댓글 수: 1
Sercan Yalcin
Sercan Yalcin 2019년 12월 6일
Thank you for the suggestion, i will check logical indexing out!

댓글을 달려면 로그인하십시오.

Andrei Bobrov
Andrei Bobrov 2019년 12월 5일
TMP = randi([-12,45],30,4);
f = {@(x)0;@(x)x-9;@(x)1;@(x)3.33 - .083*x;@(x)0};
i = discretize(TMP,[-inf,9,10,28,40,inf]);
out = arrayfun(@(x,y)f{y}(x),TMP,i);

Community Treasure Hunt

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

Start Hunting!

Translated by