problem with coding cumsum statement
5 views (last 30 days)
Show older comments
Hi all, I am really stuck with this one ! I am trying to tell matlab to calculate at which day the cumulative rainfall reaches 8mm I should only use vectorisation for this code. 2 issues here:
1- I keep getting this error: "CUMSUM supports only numerical or logical inputs." If I create the arrays manually cumsum seems to work, but if I call it from a table, it give me the above error. Does this mean, I need to create the arrays manually?
2- If if I manage to get it to work, how on Earth do I tell matlab to keep adding the rainfall values until it reaches 8mm then exit and display on which day the goal was reached without using loop ?? I have attached the file and a draft of my code below: Any help would be highly appreciated !
Many thanks in advance !
RF_tbl=readtable('Test_data1.csv');
date=[1:31]; % I tried first to call the date column from the table but that caused a problem.
RF_V= RF_tbl(6:36,5); %This calls the rainfall column from the table, which I need to calculate
if cumsum(RF_V)<=8
'continue'
else
'exit and display the date on which the goal reached' % This is not the code, this is just to explain what I need to achieve.
end
0 Comments
Accepted Answer
Dennis
on 31 Aug 2018
Your data are stored as cells, not as matrix. Your values are also strings and need to be cast to numbers first. This code might work for you (it will throw an error if the 8mm rainfall are not reached within the month):
data=readtable('Test_data1.csv');
mysum=cumsum(str2double(data{6:end,5}));
idx=find(mysum>=8,1);
date=data{idx+6,2}
More Answers (1)
Paolo
on 31 Aug 2018
Edited: Paolo
on 31 Aug 2018
A few things here. First of all, you can't apply cumsum because, as MATLAB is telling you, the data is not numeric. When you are reading data from the table, it is converted to char data type. You can either specify the type of variable when using readtable, or convert it afterwards. In my solution below, I convert it afterwards to show you one way of doing it.
I also think that what you do not want to use cumsum here, but rather a simple sum in a while loop until your exit condition is met:
RF_tbl=readtable('Test_data1.csv');
date=[1:31]; % I tried first to call the date column from the table but that caused a problem.
RF_V= str2double(RF_tbl(6:36,5).Var5);
indx=1;
tmpsum=0;
while(tmpsum<=8)
tmpsum=tmpsum+RF_V(indx);
indx=indx+1;
end
fprintf('Reached on day:%d\n',indx-1)
Prints:
Reached on day:8
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!