Error in appliying split apply

12 visualizaciones (últimos 30 días)
Skydriver
Skydriver el 9 de Jun. de 2019
Comentada: Walter Roberson el 10 de En. de 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 comentarios
Akira Agata
Akira Agata el 26 de Jun. de 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 el 26 de Jun. de 2019
Editada: Skydriver el 26 de Jun. de 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');

Iniciar sesión para comentar.

Respuesta aceptada

Mil Shastri
Mil Shastri el 12 de Oct. de 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 comentarios
Christoper Angelo Malayan
Christoper Angelo Malayan el 10 de En. de 2021
Is there a way for splitapply to SKIP this missing number and proceed to the next?
Walter Roberson
Walter Roberson el 10 de En. de 2021
No.
You can use findgroups on your current non-consecutive numbers.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Dialog Boxes en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by