Error in appliying split apply

12 visualizzazioni (ultimi 30 giorni)
Skydriver
Skydriver il 9 Giu 2019
Commentato: Walter Roberson il 10 Gen 2021
I have a problem using splitapply for function mean.
Error using splitapply (line 111)
For N groups, every integer between 1 and N must occur at least once in the vector of group numbers.
Error in try_31032019 (line 65)
LPInew = splitapply(@mean,LPI,bins_index);
G1 = findgroups(amax2);
bins_index = discretize(G1,amaxgrid);
LPInew = splitapply(@mean,LPI,bins_index);
CSR_new = splitapply(@mean,CSR,bins_index);
constN1_60_new = splitapply(@mean,N1_60,bins_index);
constFC_new = splitapply(@mean,Const,bins_index);
Is there any one can help me to solve my problem?
  7 Commenti
Akira Agata
Akira Agata il 26 Giu 2019
What you intended to do in your code is not clear for me. For example, I'm not sure how to fix the following 3 lines:
amaxgrid = linspace(0.19,0.42,36);
G1 = findgroups(amax);
bins_index = discretize(G1,amaxgrid);
Looking at your data file G1 should be integer 1~7, since amax consists of 7 different values. On the otherhand, amaxgrid becomes 1-by-36 double array between 0.19~0.42.
So I have no idea what you intended to do in the 3rd line. Could you tell us more details on what kind of calculation shall be done on your data?
Skydriver
Skydriver il 26 Giu 2019
Modificato: Skydriver il 26 Giu 2019
I want to develop 3d figure with x absis is amaxgrid, y ordinat is Mw grid and to match with the z like state bellow. In further I have to decided that QL should be representing in the z direction with matrix of grid as 36 * 7. Yess I have small mistake to decide 7 not 8.
with this coding:
Mwgrid = linspace(4.75,8.25,7);
amaxgrid = linspace(0.19,0.42,36);
grid = meshgrid(Mwgrid,amaxgrid);
QL_new_1 =zeros(size(grid));
for i=1:length(LPInew)
for j=1:length(Mwgrid)
QL_new_1(i,j) = Coeff(1) + Coeff(2)*constN1_60 + Coeff(3).*constFC + ...
Coeff(4).*log(LPInew(i)) + Coeff(5).*log(Mwgrid(j)) + Coeff(6).*log(constDi);
end
end
QL_zeroes=QL_new_1; % import
QL_zeroes(QL_zeroes<0)=0; % import
PL = normcdf(QL_zeroes); % import
[Xq_cond1,Yq_cond1] = meshgrid(linspace(min(Mwgrid),max(Mwgrid),8),linspace(min(amaxgrid),max(amaxgrid),36)); %import
Vq_cond1 = interp2(Mwgrid, amaxgrid, PL,Xq_cond1,Yq_cond1,'cubic');
Vq_cond2 = interp2(Mwgrid, amaxgrid, PL_new,Xq_cond1,Yq_cond1,'cubic')
figure(4)
surf(Xq_cond1, Yq_cond1, Vq_cond1)
hold on
xlim([4.75 7.6])
xlabel('Magnitude (Mw)');
ylim([0 3])
ylabel('Ground Surface Acceleration (a_{max})');
zlim([0 1])
zlabel('Conditional probability of a_{max} and Mw');

Accedi per commentare.

Risposta accettata

Mil Shastri
Mil Shastri il 12 Ott 2019
The group numbers provided to splitapply need to be every integer between 1 to N. For example:
This will work:
splitapply(@mean,1:5,[2,2,3,1,1])
and this will not because the group number 3 is missing:
splitapply(@mean,1:5,[2,2,4,1,1])
  2 Commenti
Christoper Angelo Malayan
Christoper Angelo Malayan il 10 Gen 2021
Is there a way for splitapply to SKIP this missing number and proceed to the next?
Walter Roberson
Walter Roberson il 10 Gen 2021
No.
You can use findgroups on your current non-consecutive numbers.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Dialog Boxes in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by