index exceed matrix dimensions

hello folks, I'm trying to run 2 different dimensional vectors by using weighted regions with a chosen factor. can I get some expert opinion on identify the error,please. your help is gratefully appreciated.Many thanks in advance.
x=train_data; % 882 x2 double
z=test_data; %882 x 8 double
distance_max=[];
for h=1:size(x)
for kb=1:size(z)
kk=x(:,h);
gg=z(:,kb); <-- this is where the error appeared
weightsum=0;
ww = [0, 1,1,1,1,1,0,0,1,1,1,1,1,0,1,1,2,1,2,1,1,2,4,4,0,4,4,2,1,1,1,1,1,1,1,0,1,2,2,2,1,0,0,0,1,1,1,0,0];
length=18;
region = size(x,1)/length;
for e=1:region
e_start = (e -1) * length+1 ;
e_end = e_start + length-1 ;
xpart=kk(e_start:e_end);
zpart = gg (e_start:e_end);
D1 = pdist2(xpart',zpart','chisq')*ww(e);
distance_max=[distance_max,D1];
weightsum=weightsum+D1;
end
results(h,k)={weightsum};
end
end

5 comentarios

Adam
Adam el 11 de Sept. de 2014
Editada: Adam el 11 de Sept. de 2014
Presumably you got a line number with that error that tells you the line which causes the error?
It is a lot more difficult for us to look through a whole block of code hunting for an error when the error message should just point straight to it!
What is y by the way?
seprienna
seprienna el 11 de Sept. de 2014
Editada: seprienna el 11 de Sept. de 2014
this is the line
Index exceeds matrix dimensions.
Error in weight (line 13)
gg=z(:,kb);
I have edited it in the code.
There is no 'y', its only 'x'-training data and 'z'-testing data
Adam
Adam el 11 de Sept. de 2014
Editada: Adam el 11 de Sept. de 2014
There is a
for kb=1:size(y)
line in your code though so when I tried to run it with random matrices of the correct size in place of your x and z that threw an error.
Should that just be size(z) then instead of size(y)?
seprienna
seprienna el 11 de Sept. de 2014
Editada: seprienna el 11 de Sept. de 2014
million apologies for the confusion adam. I was using the y for a different data but in this experiment, i'm using 'x' and 'z'. Can you kindly point out how can i avoid the dimension error please.
Rick Rosson
Rick Rosson el 11 de Sept. de 2014
Two lines above the line that caused the error:
for kb=1:size(y)

Iniciar sesión para comentar.

 Respuesta aceptada

Rick Rosson
Rick Rosson el 11 de Sept. de 2014
Editada: Rick Rosson el 11 de Sept. de 2014
Please try changing the line
for kb=1:size(y)
to the following:
for kb=1:size(z)
Also, please correct the issue with size described in the answer provided by Adam.

3 comentarios

seprienna
seprienna el 11 de Sept. de 2014
Hello Rick,
I'm aware with the size problem. I have followed your advise, but it looks like I'm not getting what i wanted. If you could look above for my comment to Adam, maybe you can enlighten my issue. your opinion is greatly appreciated.
Rick Rosson
Rick Rosson el 11 de Sept. de 2014
I think you want to loop over the number of columns in each matrix. So please try the following:
for h=1:size(x,2)
for kb=1:size(z,2)
seprienna
seprienna el 11 de Sept. de 2014
Rick,thanks for the tips. that is the result i'm looking for. thanks again.

Iniciar sesión para comentar.

Más respuestas (1)

Adam
Adam el 11 de Sept. de 2014
Editada: Adam el 11 de Sept. de 2014
size(x)
will return a length d vector where d is the dimension of x. In your case that will be [882 2] and likewise size(y) will return [882 8].
If you want the first dimension you can use
size( x, 1 )
to give 882, or
size( x, 2 )
if you want the second dimension only. You can use
length(x)
if you just want the longest dimension but don't know what the index of that dimension is, but I don't recommend using length for this purpose if you do know which dimension you want.
That may not be the only problem, but it will definitely cause problems.

3 comentarios

seprienna
seprienna el 11 de Sept. de 2014
Editada: seprienna el 11 de Sept. de 2014
hello Adam, many thanks for the helpful information.
i need both dimensions as the are 2 images in the (x) and (z) are the 8 testing images.
i need to calculate the chi-square distance between (x) and (z).
Initially I used size(x,1) to calculate 1 image only, but with 2 images, i wish to do it in a loop, I read from the MATLAB guide that it is possible, but I'm not sure where I made the mistake.
Well from what your code do, it seems that you need to use
size(x,2)
and the same for z.
seprienna
seprienna el 11 de Sept. de 2014
it works!!!thanks you very much

Iniciar sesión para comentar.

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Productos

Etiquetas

Preguntada:

el 11 de Sept. de 2014

Comentada:

el 11 de Sept. de 2014

Community Treasure Hunt

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

Start Hunting!

Translated by