matlab - After using `uniquetol` to an array, how can i find back where the entries are in the array? -
>> = [12345678.123456789, 12345678.123456788] = 1.0e+07 * 1.234567812345679 1.234567812345679 >> unique(a) ans = 1.0e+07 * 1.234567812345679 1.234567812345679 >> uniquetol(a,eps) ans = 1.234567812345679e+07 so 2 numbers considered same within tolerance of eps.
however, after obtaining 1.234567812345679e+07. want know entries in a match 1.234567812345679e+07 within tolerance of eps (which reasonable after use uniquetol eps tolerance before.)
but
find(abs(a-uniquetol(a,eps))<eps) ans = 2 even
>> find(abs(a-uniquetol(a,eps))<=eps) ans = 2 >> find(abs(a-uniquetol(a,eps))<=eps*10) ans = 2 does not give me 2 entries.
it
>> find(abs(a-uniquetol(a,eps))<=eps*10000000) ans = 1 2 or
>> find(abs(a-uniquetol(a,eps))<=eps(uniquetol(a,eps))) ans = 1 2 will give me first entries. (find(abs(a-uniquetol(a,eps))<=eps(uniquetol(a,eps))) not work numbers.)
why? because use uniquetol(a,eps) before, not uniquetol(a,eps*10000000). why find has set @ higher tolerance uniquetol.
generally a not of 2 entries only, if set tolerance of find high or using find(abs(a-uniquetol(a,eps))<=eps(uniquetol(a,eps))) double count original entries in a. because uniquetol(a,eps) produces 2 entries sometimes.
there 2 additional outputs can request uniquetol. the documentation page it, [c,ia,ic] = uniquetol(___) returns index vectors ia , ic, such c = a(ia) , a~c(ic) (or a(:)~c(ic) if a matrix), ~ means values within tolerance of each other. think you're looking use ic here. example, ic == 1 gives logical mask of entries of a "map" c(1).
Comments
Post a Comment