Effacer les filtres
Effacer les filtres

Info

Cette question est clôturée. Rouvrir pour modifier ou répondre.

Hi everyone, I need your help on my two questions.

1 vue (au cours des 30 derniers jours)
Engdaw Chane
Engdaw Chane le 15 Fév 2018
Clôturé : MATLAB Answer Bot le 20 Août 2021
Q1,
I am working on 30 years monthly data. I have a 3D matrices A=194 x 201 x 360 rows, columns and months respectively.
I am interested only in months from April to September in every year. I need to extract these months from all years. I tried the following:
for year=1:30;
April=(year-1)*12+4;
Sept=(year-1)*12+9;
k(:,:,year)=A(:,:,April:Sept);
for kj=size(k,3);
d(:,:,kj)=A;
end
end
I am getting “Subscripted assignment dimension mismatch.”
Q2, I have two 3D matrices.
B=194 x 201 x 360; C=194 x 201 x 360;
I need to divide B by C
D(:,:,:)= B(:,:,:)./ C(:,:,:);
I am getting Inf values for all rows and columns.
I tried the following to find zero values and replace by 1 in the denominator not to get Inf values in the output matrix.
C(C==0) = 1;
I am still getting the Inf in all rows and columns.
Thank you.
Kindly, Engdaw

Réponses (1)

Bob Thompson
Bob Thompson le 15 Fév 2018
Q1
You're getting dimension mismatch because you're trying to put multiple sheets of A into a single sheet of k.
k(:,:,year)=A(:,:,April:Sept);% where k being called is 194x201x1, but A being called is 194x201x6
Q2 Your check of C==0 will not come up positive unless all values of C are 0. Also, if you have numbers in C and you are still getting all rows and all columns as INF then there is another issue. What type of division are you trying to do? Are you trying to divide the actual arrays by each other, as in matrix math, or are you simply trying to divide the corresponding values.
D(1,1,1) = B(1,1,1)/C(1,1,1)
D(2,1,1) = B(2,1,1)/C(2,1,1)
etc...
  2 commentaires
Engdaw Chane
Engdaw Chane le 15 Fév 2018
@Bob Nbob, Thank you.
Q1, I tried the following:
% code
k(:,:,April:Sept)=A(:,:,April:Sept);
and I am getting "Subscript indices must either be real positive integers or logicals." Please suggest me how I can select months in all 30 years.
Q2
What I need to do is the following as you noticed it.
D(1,1,1) = B(1,1,1)/C(1,1,1)
D(2,1,1) = B(2,1,1)/C(2,1,1) etc...
I need to do the following: F=G(1,1,1).^H(1,1,1)
Is the following correct; F=G(:,:,:).^H(:,:,:) ? Suggest me the solutions please.
Kindly, Engdaw
Bob Thompson
Bob Thompson le 15 Fév 2018
Modifié(e) : Bob Thompson le 15 Fév 2018
Q1
Double check that April and Sept are coming out as numbers.
To save the data for multiple years, you can either save it to multiple arrays, or you can have a multiplication added to your indexing to consider the year. It's ugly, and you might have to mess with the values a bit to perfect it, but the method should work to just add all the consecutive years as sheets.
k(:,:,April+(year-1)*6:Sept+(year-1)*6) = ...
Q2
Matrix and array functions are admittedly not my strong suit. From what I understand using . with an operation means the individual terms are considered, rather than matrix operations which is conducted without the period. I would suggest checking this though with something smaller, maybe a 2x2x2 rather than your full size arrays. If nothing else, you can use a loop, or two, or three to just perform the individual operations "manually".

Cette question est clôturée.

Community Treasure Hunt

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

Start Hunting!

Translated by