83 views (last 30 days)

Hey all, When I try to use this code:

output = cell(size(new_precipitation));

for i = 1:length(new_precipitation)

mn2t_mat = new_precipitation{i}; % extract matrix of ith element

yd = max(max(mn2t_mat)); % first find maximum for each hour

y = reshape(yd,24,1,size(yd,3)/24); % reshape it by day

output{i} = max(y); % find maximum of each day

end

This error appeared:

Brace indexing is not supported for variables of this type.

I was search for some answer but can't find how to fix it. Do you have any idea how to overcome this error?

I attached a new_precipitation.mat file in the google drive which has 10 MB in this link:

Thank you in advance

Caption:

I have a 3D matrix named new_precipitation (latitude x longitude x time). In essence time dimension is in the hourly time steps for a year (365-day x 24 hours = 8760). Whole data are for temperature and I want to find the maximum temperature for each day instead of hourly.

24 values for each day that represents temperature so I need to find a maximum of 24 values in order to have the maximum temperature of each day.

So I need to find maximum value for every 24 by 24-time steps and consider it for days.

I'm sorry I forgot to change the name so new_precipitation is a wrong variable name of new_temperature.

ME
on 23 Jan 2020 at 9:13

I think Walter was onto the right thing in his comment. new_precipitation is of type 'double' and so doesn't support brace (i.e. { } ) indexing. For that variable you'll want to change to ordinary round brackets (i.e. ( ) ). In other words, you'll need to change the third line to something like:

mn2t_mat = new_precipitation(i); % extract matrix of ith element

Alex Mcaulley
on 23 Jan 2020 at 10:20

I think you want something like this:

output = zeros(size(new_precipitation)./[1,1,24]);

for i = 1:24:size(new_precipitation,3)

mn2t_mat = new_precipitation(:,:,i:i+23); % extract matrix corresponding to 24 hours of one day

yd = max(mn2t_mat,[],3); %calculate the maximum for each latitude, longitude

output(:,:,ceil(i/24)) = yd; % save the values of day i

end

Alex Mcaulley
on 24 Jan 2020 at 8:05

The best way to understand the code is to put breakpoints and go though it line per line seeing what happens in each iteration (reading the documentation in case you don't understand any function)

output = zeros(size(new_precipitation)./[1,1,24]); %Preallocation of the output matrix of size [20,16,365]

for i = 1:24:size(new_precipitation,3) %Loop to extract the values corresponding to 1 day

mn2t_mat = new_precipitation(:,:,i:i+23); %In mn2t_mat you have the values corresponding to 24 hours of 1 day

yd = max(mn2t_mat,[],3); %Here, we calculate the maximum for each latitude, longitude in this day

output(:,:,ceil(i/24)) = yd; % save the values of that day

end

Sign in to comment.

Sign in to answer this question.

Opportunities for recent engineering grads.

Apply Today
## 2 Comments

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/501577-brace-indexing-is-not-supported-for-variables-of-this-type#comment_789115

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/501577-brace-indexing-is-not-supported-for-variables-of-this-type#comment_789115

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/501577-brace-indexing-is-not-supported-for-variables-of-this-type#comment_789117

⋮## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/501577-brace-indexing-is-not-supported-for-variables-of-this-type#comment_789117

Sign in to comment.