Having trouble getting this find work properly
Mostrar comentarios más antiguos
I have two cell arrays where the first one is time converted into serial date and the second cell array (bb) which has specific times associated with other data in it. I'm trying to extract the rows in bb in chronological order by using time cell array. BB cell array is a 1x34 cell array where each cell once expanded is a nx7 array.
I am rather new at this, but I came up with this, and I can't get this working correctly as well as do what I want it to do. Not even sure if it is in the right direction.
I'm trying to find the serial date in the test1 file in all columns of bb (1x34) and extract it into another matrix when I call the first row of time (test1). BB's {1x34}(nx7) the column 7 of the nx7 is the serial date for that BB.
for i=1:length(test1)
for t=1:length(bb)
for w=1:length(bb{t})
[a{t} b(w,1:7)]=find(bb{t}(w,1:7)==test1(i)
end
end
end
Respuestas (1)
KSSV
el 20 de Dic. de 2016
0 votos
don't use find, check with ismemebr, ismemebrtol.
6 comentarios
KSSV
el 20 de Dic. de 2016
clc; clear
load bb.mat ;
load test1.mat ;
for i=1:length(test1)
for t=1:length(bb)
for w=1:length(bb{t})
[aa1, bb1]=find(bb{t}(w,:)==test1(i))
if ~isempty(aa1)
a{t} = aa1 ; b(w,1:7) = bb1 ;
end
end
end
end
Takes hell lot of time and no values I can find common.
liu James
el 20 de Dic. de 2016
Steven Lord
el 20 de Dic. de 2016
If that's the case, test1(589)-bb{1}{1,7} should be exactly equal to 0. From what you've said it will not be exactly 0 but will be a nonzero value with very small magnitude.
The == operator performs exact, down-to-the-last-bit equality testing. This means that two numbers that look the same may not be the same.
format short
x = 1.25
y = x+eps(x)
areTheyEqual = x == y % false
howDifferentAreThey = y-x % small
If you want to confirm that x and y are not the same, display their hex pattern.
format hex
x
y
format % reset the display format to default
liu James
el 21 de Dic. de 2016
KSSV
el 21 de Dic. de 2016
You fix a small parameter eps and subtract them.
eps = 10^-6 ;
idx = test1(589)-bb{1}(1,:)<eps
so in idx if any value is 1, then you can say they are equal. Using == for flottant numbers is not advisable. Also, I suggested you to use ismembertol.
Categorías
Más información sobre Matrices and Arrays en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!