値の配列が膨大で、すべてまたは1よりはるかに小さいため、切り上げ/切り下げ関数を使用しても意味がありません。とにかく、これらの非整数値で「検索」関数を使用/作成できますか?
例えば
ind=find(x,9.5201e-007)
FWIWすべての値は、配列内で順番に並んでいます。
とても有難い!
値の配列が膨大で、すべてまたは1よりはるかに小さいため、切り上げ/切り下げ関数を使用しても意味がありません。とにかく、これらの非整数値で「検索」関数を使用/作成できますか?
例えば
ind=find(x,9.5201e-007)
FWIWすべての値は、配列内で順番に並んでいます。
とても有難い!
使用している構文が正しくありません。
find(X,k)
k
ゼロ以外の値を返しますk
。そのため、整数である必要があります。あなたが欲しい
find(x==9.5021e-007);
%# ______________<-- logical index: ones where condition is true, else zeros
%# the single-argument of find returns all non-zero elements, which happens
%# at the locations of your value of interest.
これは浮動小数点数を正確に表す必要があることに注意してください。そうでない場合、失敗します。許容範囲が必要な場合は、次の例を試してください。
tol = 1e-9; %# or some other value
val = 9.5021e-007;
find(abs(x-val)<tol);
ある範囲の許容範囲内の実数を見つけたい場合、私は通常、それらすべてをその許容範囲のレベルに丸めてから、検索、並べ替えなどを行います。
x
私の実数の場合、私は次のようなことをします
xr = 0.01 * round(x/0.01);
その場合、xrはすべて.01の倍数になります。つまり、最も近い.01に丸められます。その後、私はすることができます
t = find(xr=9.22)
そして、9.2144444444449と9.225 x(t)
の間のすべての値になります。x
あなたが望むものはあなたのコメントから聞こえます
`[b,m,n] = unique(x,'first');
次にb
、繰り返しのないxの要素のソートされたバージョンになります。
x = b(n);
したがって、に4つの '1がある場合n
、値b(1)
はx
4回表示され、の位置はx
にあることを意味しますfind(n==1)
。